重读Essential C++读书笔记1
放假有点时间,打算重新好好地读一次essential c++这本书,原来读这本书的时候,时间跨度太大了,导致与看了后面忘了前面。打算这次着重放在面向对象这方面。
By sssa2000
7/24/2004
第一章 c++编成基础
1、对象的定义和初始化
书中提到了我们少用的一种初始化方法,一般来说初始化我们都这样:
int a=100; 但是如果有多个初始值,比如给一个复数赋值,需要有虚部和实部,那么这种方法就不能用了, 可以使用构造函数赋值法:complex<int>a(2,4) 表示给一个复数变量a赋值为(2,4),同样,把int a=100转换成这种方法:int a(100)。
2、Arrays 和Vectors
比较两种容器的声明:
int a[10];
vector<int>a(10);
vector比array的用法更加灵活,但是初始化来说array比vector方便。
初始化的时候如果你写下这样的句子,编译器会提示出错:vector<int>a(4)=(1,2,3,4)。因为vector不支持这种方式的初始化。必须这样:
vector<int>a(4);
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;;
或者利用一个已经初始化的数组:
int b[4]={1,2,3,4};
vector<int>a(b,b+4);
我们知道其实数组名就是这个数组在内存中的地址,所以这里传给vector的是数组b的启示和终止地址。
我们可以使用a.size()来获得vector的大小,所以vector比较适合长度常常改变的数据。
3、还是指针
前几天写了关于C语言中的指针的文章,这里又看见指针真得很亲切。
书中提到了要检测空指针的重要性,可见大师果然不一样,看了很多书,很少有提到要检测空指针的,其实空指针正是十分危险的东西。
假设有以下几个vector:a,b,c,d 我们需要在程序中根据不同的情况来存取这4个vector,可以声明一个数组:
vector* e[4]={&a,&b,&c,&d};
这里,e是一个数组,类型为vector* 这样我们就可以通过e[i]来操作这4个vector。
4、文件读写:
主要就是流的具体运用。
#include <iostream>
#include<string>
#include<fstream>
main()
{
string a="hello",b="world";
ofstream outfile("1.txt");
if (!outfile)
cerr<<"unable to open file";
else outfile<<a<<b<<endl;
}
当然我们可以使用ofstream outfile("1.txt",ios_base::app); 来使用append模式
这里我们使用的是ofstream来写入,我们当然可以使用ifstream来读入。
main()
{
string a="hello",b="world",c;
ifstream infile("1.txt");
if (!infile)
cerr<<"unable to open file";
else
{infile>>c;
cout<<c;
}
}
(第一章完)