2011-8-29 09:28 周一 晴
2.3.3 定义对象
1 初始化
两种初始化的形式:直接初始化和复制初始化。直接初始化将初始化值放在括号“()”里来初始化;复制初始化用等号“=”来初始化。
初始化与赋值的区别:
初始化:创建变量并给它赋值;
赋值: 擦除对象的当前值并用新值来代替,这是因为当定义一个对象时它会默认的赋予其一个默认值。
2.3.5 声明和定义
变量的定义:
为变量分配存储空间,指定初值。在一个程序中,变量有且仅有一个定义。
声明:
用于向程序表明变量的类型和名字。定义也是声明:当定义变量时本身就声明了它的类型和名字。
关键字extern 可以用来声明变量而不是定义变量。使用extern声明变量时包括extern关键字、变量类型、变量名。extern声明不分配存储空间,只是说明变量已经在其它地方定义,变量可以声明多次,但只能定义一次。
若在使用extern的同时时也给变量赋值,则变为定义,此时要分配存储空间,之后就不能再使用此变量名再定义了,也不能再初始化了。
2.4 const限定符
1 const 用来定义一个常量,通过const定义的变量只能在本文件中使用,其它文件不能引用,若想在其它文件中使用可以在定义时使用关键字 extern。
2.9 编写自己的头文件
1 头文件用于声明而不是用于定义,其中不能有变量或函数的定义。
2 const变量为常量表达式时,应放在头文件中;若不是,不应该放在头文件中定义。
3 预编译时防止多次包含一个头文件的方法:
#ifndef SALESITEM_H
#define SALESITEM_H
….
#endif
3.2 标准 string类型
3.2.2 string 对象的读写
1 string类型的输入操作符:
n 读取并忽略开关所有的空白字符(如空隔、换行符、制表符)。
n 读取字符直到再次遇到空白字符,读取终止。
2 getline读取整行文本
string line;
getline(cin, line);
它不忽略换行符,但也不存储换行符,遇到换行符就停止读取。
3.2.3 string对象的操作
1 为了避免溢出,保存string对象size最安全的方法是使用标准库类型string::size_type.
2 当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。
3.3 标准库vector类型
1 一些有自定义构造函数但没有默认构造函数的类,在初始化这种类型的vector对象时,程序员就不能仅提供元素个数,还需要提供元素初始值。
4.1 数组
1、特殊的字符数组
两种不同赋值方式所占用的空间不同:
char ca1[ ] = {'c','+','+'};
char ca2[ ] = {'c','+','+','\0'};
char ca3[] = "C++";
cout<<" sizeof( ca1 ) = " << sizeof(ca1)<<endl;
cout<<" sizeof( ca2 ) = " << sizeof(ca2)<<endl;
cout<<" sizeof( ca3 ) = " << sizeof(ca3)<<endl;
输出结果:
sizeof( ca1 ) = 3
sizeof( ca2 ) = 4
sizeof( ca3 ) = 4
4.2 指针的引入
4.2.3 指针的操作
1 当一个指针变量sp1指向一个字符串变量s1时,若此时再给此指针sp1赋值,则也会改变字符串变量s1。而若此时sp1指向另一指针sp2,只是让sp1重新指向了一个变量,但并没改变s1的值。
string s1("some values");
string *sp1 = &s1;
string s2("another");
string *sp2 = &s2;
cout<<" *sp1 = "<<*sp1<<endl;
cout<<" s1 = "<<s1<<endl;
cout<<" &s1 = "<<&s1<<endl;
cout<<" sp1 = "<<sp1<<endl;
cout<<" *sp2 = "<<*sp2<<endl;
cout<<" &s2 = "<<&s2<<endl;
cout<<" sp2 = "<<sp2<<endl;
*sp1 = " a new value ";
cout<<"======================"<<endl;
cout<<" *sp1 = "<<*sp1<<endl;
cout<<" s1 = "<<s1<<endl;
cout<<" &s1 = "<<&s1<<endl;
cout<<" sp1 = "<<sp1<<endl;
cout<<" *sp2 = "<<*sp2<<endl;
cout<<" &s2 = "<<&s2<<endl;
cout<<" sp2 = "<<sp2<<endl;
sp1 = sp2;
cout<<"======================"<<endl;
cout<<" *sp1 = "<<*sp1<<endl;
cout<<" s1 = "<<s1<<endl;
cout<<" &s1 = "<<&s1<<endl;
cout<<" sp1 = "<<sp1<<endl;
cout<<" *sp2 = "<<*sp2<<endl;
cout<<" &s2 = "<<&s2<<endl;
cout<<" sp2 = "<<sp2<<endl;
输出结果:
*sp1 = some values
s1 = some values
&s1 = 0012FF34
sp1 = 0012FF34
*sp2 = another
&s2 = 0012FF00
sp2 = 0012FF00
======================
*sp1 = a new value
s1 = a new value
&s1 = 0012FF34
sp1 = 0012FF34
*sp2 = another
&s2 = 0012FF00
sp2 = 0012FF00
======================
*sp1 = another
s1 = a new value
&s1 = 0012FF34
sp1 = 0012FF00
*sp2 = another
&s2 = 0012FF00
sp2 = 0012FF00