- 关于拷贝构造函数,重载赋值运算符
A b = a;
此情况属于:一个对象(b)需要通过另外一个对象(a)进行初始化
这种情况需要利用拷贝构造函数,除此之外,还有两种情况需要调用拷贝构造函数
(1) 一个对象以值传递的方式传入函数体
(2)一个对象以值传递的方式从函数返回
A b;b=a;
此情况属于:定义了一个对象(b),然后调用后面重载的赋值函数
A *b = new A;
此时调用了构造函数,但是注意,这里的赋值运算符不是类中的赋值运算符,而是普通的赋值运算符;
如果定义一个指针或者引用,不会调用构造函数
拷贝构造函数没有返回值,拷贝构造函数的参数可以使一个或多个,但左起第一个必须是类的引用对象
-
关于scanf里的%xd
scanf(“%3d%f”,&x,&y);则会将输入的前3位数赋给x,输入中后面的部分将赋给y,
如输入12345□678↙,则x=123,y=45.000000。 -
double类型可以与int,float进行匹配
如果同时出现两种函数,会出现多个匹配 -
内联函数
一般可以用于加快程序执行速度,但是可能增加也可能减少可执行文件大小
构造函数可以是内联函数 -
sizeof和strlen
sizeof返回所占内存空间,strlen返回字符串长度
char *str1 = “Hello”,str2[] = “Hello”;
sizeof(str1)= 4
sizeof(str2)= 6
但是得注意八进制转义字符和十六进制转义字符
八进制字符的一般形式是’\ddd’,d是0-9的数字。十六进制字符的一般形式是’\xhh’,h是0-9或A-F内的一个
如strlen以下字符串,结果为
" 0123\0789 " 7 (0 ,1,2,3,\07,8,9)
" 0123\0123 " 6(0 ,1,2,3,\012,3)
" 0123\0889 " 4(0 ,1,2,3,\0)
-
计算结构体空间
注意#pragma pack(4)与8
每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行
注意点
1 先找有没有v