C++ Primer Plus 第12章 类和动态内存分配

1.类里不能初始化静态成员变量,只能在类外
如class A{
static int a;
}
 int A::a = 10;
常量变量只能在类的构造函数成员列表初始化,
如class A{
static int a;
public:
 A():a(10){};
}
静态常量可以在声明时初始化
class A{
static const int a = 10;
}

经常使用枚举量作为类的常量
class A {
enum{one,two,three}
}

2.同一个类,当使用一个对象初始化另一个对象时,会使用复制构造函数

3.对于一个类,如果没有定义,编译器会自动生成下面的成员函数:
默认构造函数、默认析构函数、复制构造函数、赋值运算符、地址运算符

4复制构造函数
class_name(const Class_name &) 一般形式

何时调用:新建一个对象并将其初始化为同类现有对象时
比如常见的按值传递,返回对象会调用

5.试图释放内存两次或以上可能导致程序异常终止

6.默认复制构造函数是浅复制,比如一个指针,两个对象的指针会指向同一个地址
面对默认复制构造函数的缺陷,应当显式定义复制构造函数

7.重载赋值运算符
调用时机:将已有的对象赋给另一个对象时
一般形式:Class_name & Class_name::operator=(const Class_name &)

使用赋值运算符的注意点:
一、由于目标对象可有已分配数据,应当先使用delete[]来释放数据
二、应该避免赋值给自身
三、函数返回一个指向调用对象的引用,一般为 return *this;

8.在类中使用new要注意的地方:
在构造函数中使用new来初始化指针成员,应在析构函数中使用delete
new和delete应道匹配 new——delete; new []——delete[]
应定义一直复制构造函数,进行深复制
定义一个重载的赋值运算符,进行深复制

9.delete可以用于空指针

10.返回对象的说明
返回指向const对象的引用 :返回对象会调用复制构造函数,返回引用则效率更高
返回指向非const对象的引用:常用于重载赋值运算符以及重载与cout一起使用的<<运算符
返回对象:返回的对象时函数中的局部变量,则不能使用返回引用
返回const对象:能够使返回的值不能作为左值使用

11.对象是动态变量,则程序块结束时,将调用对象的析构函数
对象时静态变量,在程序结束时调用析构函数
对象时new创建,则当显式调用delete才会析构

12.定位new运算符P456-459

13.成员初始化列表的语法:
这种格式只能用于构造函数
必须用这种格式初始化非静态const数据成员
必须使用这种格式初始化引用数据成员
成员变量初始化顺序要和声明顺序一致

12.10编程练习 有时间再做

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值