您的位置:首页 > 编程语言 > C语言/C++

《C++ Primer Plus(第六版)》(22)(第十二章 类和动态内存分配 笔记)

2016-12-24 10:32 344 查看
1.类的静态成员,在类声明中声明,在包含类方法的文件中初始化。初始化时使用作用域运算符来指出静态成员所属的类。

如果静态成员是整形或枚举型const,则可以在类声明中初始化。

2.值传递的时候会调用复制构造函数,如果代码里面没有复制构造函数,则会生成一个系统默认的。

但是函数结束之后,就会调用析构函数。

如果是使用浅复制,可能会把原来的对象某些东西更改掉了。

构造函数的原型一般这样:

className(const className& );


3.C++会提供一些特殊的函数,如果程序本身没有定义的话。

默认构造函数

默认析构函数

复制构造函数

赋值运算符

地址运算符

C++11提供了另外两个特殊的成员函数:移动构造函数和移动赋值运算符

这些都是在程序员自己不提供的情况下,编译器自动生成默认的。

4.带参数的构造函数,如果所有参数都有默认值,则可以作为默认构造函数

但是,只能有一个默认构造函数,否则有二义性。

class StringBad
{
public:
StringBad(const char*s = "" );
StringBad();


普通函数可以这样的,不会产生二义性

int sb(){}
int sb(int a = 0){}

5.如果类中包含了在新对象创建时发生变化的静态数据成员,应该提供一个显示复制构造函数来处理计数问题。

6.如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据,而不是指针,这被称为深度复制。

复制的另一种形式(成员复制或浅复制)只是复制指针值。浅复制仅浅浅复制指针信息,而不会深入挖掘以复制指针引用的结构。

7.赋值运算符,C++允许类对象赋值,通过自动为类重载赋值运算符实现的。原型如下:

className& className::operator=(const className&);
初始化对象的时候,并不一定使用赋值运算符,可能使用复制构造函数。

也可能使用复制构造函数,创建了一个临时对象,然后复制到新对象。

8.C++11用nullptr来表示空指针。

9.构造函数如果用到new,析构函数要用到delete,如果是new[],则要用delete[]。

10.析构函数是可以显式调用的,使用定位new的对象可以显式调用析构函数。这样析构了自身,也不会删除了内存块。

11.构造函数的成员初始化列表,对于const的成员也能初始化。

class CTest
{
const int a;
CTest();
}

CTest::CTest():a(123)
{
}
对于被声明为引用的常量,也可以使用这种语法。

只有构造函数才能使用这种语法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐