C++ Primer Plus(第六版)读书笔记(二)
2016-01-20 14:31
537 查看
explicit,写在声明构造函数的函数名的前面,限制使用时必须显示地调用。(P418-P419)
§转换函数是类成员,没有返回类型、没有参数、名为operator typeName(),其中,typeName是对象将被转换成的类型。(P415)
§静态类成员的特点:类的所有对象共享同一个静态成员。不能在类声明中初始化静态成员变量。初始化语句指出了类型,并使用了作用域运算符,但没有使用关键字static。但对于静态数据成员为const整数类型或枚举型(P371-P372)。
§在构造函数中使用new来分配内存时,必须在相应的析构函数中使用delete来释放内存。
§当使用一个对象来初始化另一个对象时,复制构造函数被调用。(P433)
§delete[]与使用new初始化的指针和空指针都兼容。(P447/P438)
§不能通过对象调用静态成员函数,如果静态成员函数是在公有部分声明的,则可以使用类名和作用域解析运算符来调用它。
§返回对象将调用复制构造函数,而返回引用不会。特别是返回临时对象,由于程序执行完这个函数后就会执行临时对象的析构函数,这时如果是返回临时对象的引用就会出错。(P450)
§声明了一个String的类 const int ArSize =10; String sayings[ArSize];
声明指向类对象的指针: String * glamour;
将指针初始化为已有的对象: String * first = &sayings[0];
使用new和默认的类构造函数对指针进行初始化: String * gleep = new String;
使用new和String(const String&)类构造函数对指针初始化:
String * favorite = new String(sayings[choice]);
使用->操作符通过指针访问类方法:sayings[0].length()或者first->length();
使用*解除引用操作符从指针获得对象:*first=sayings[0];(P455)
§只有构造函数可以使用这种初始化列表语法,特别是对const和引用的类的初始化时必须使用这种初始化的方式。(P464)
class string
{...}
class Agent
{public:
string belong;
Agent(string& a);/引用了string类,故要用初始化成员列表
...
};
Agent::Agent(string& a):belong(a)
§派生类不能直接访问基类的私有成员,而必须通过基类方法进行访问;派生类需要自己的构造函数;派生类可以根据添加额外的数据成员和成员函数。
§ 基类指针可以在不进行显示类型转换的情况下指向派生类对象;基类引用可以在不进行显示类型转换的情况下引用派生类对象。这个仅单向性,反过来派生类的指针或引用不可以用于基类。(P488)
§当一个函数的形参为一个基类的引用时,它可以指向基类对象或派生类对象。若指向派生类对象,那么函数在被调用时会使用基类对象的复制构造函数。(P489)
§编译器对非虚方法使用静态联编,对虚方法使用动态联编。(P503)
§析构函数应当是虚函数,除非类不用做基类。(P505)
§友元不能是虚函数,因为友元不是类成员,而只有成员才能是虚函数。(P505)
§派生类对基类的某一函数的重新定义不等同于函数的重载。第一,如果重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型是基类引用或指针,则可以修改为指向派生类的引用或指针。第二,如果基类声明被重载了,则应在派生类中重新定义所有的基类版本。(P506)
只有plus(int a,int b)在D类里重新定义了才能继续使用。
§转换函数是类成员,没有返回类型、没有参数、名为operator typeName(),其中,typeName是对象将被转换成的类型。(P415)
§静态类成员的特点:类的所有对象共享同一个静态成员。不能在类声明中初始化静态成员变量。初始化语句指出了类型,并使用了作用域运算符,但没有使用关键字static。但对于静态数据成员为const整数类型或枚举型(P371-P372)。
§在构造函数中使用new来分配内存时,必须在相应的析构函数中使用delete来释放内存。
§当使用一个对象来初始化另一个对象时,复制构造函数被调用。(P433)
§delete[]与使用new初始化的指针和空指针都兼容。(P447/P438)
§不能通过对象调用静态成员函数,如果静态成员函数是在公有部分声明的,则可以使用类名和作用域解析运算符来调用它。
§返回对象将调用复制构造函数,而返回引用不会。特别是返回临时对象,由于程序执行完这个函数后就会执行临时对象的析构函数,这时如果是返回临时对象的引用就会出错。(P450)
§声明了一个String的类 const int ArSize =10; String sayings[ArSize];
声明指向类对象的指针: String * glamour;
将指针初始化为已有的对象: String * first = &sayings[0];
使用new和默认的类构造函数对指针进行初始化: String * gleep = new String;
使用new和String(const String&)类构造函数对指针初始化:
String * favorite = new String(sayings[choice]);
使用->操作符通过指针访问类方法:sayings[0].length()或者first->length();
使用*解除引用操作符从指针获得对象:*first=sayings[0];(P455)
§只有构造函数可以使用这种初始化列表语法,特别是对const和引用的类的初始化时必须使用这种初始化的方式。(P464)
class string
{...}
class Agent
{public:
string belong;
Agent(string& a);/引用了string类,故要用初始化成员列表
...
};
Agent::Agent(string& a):belong(a)
§派生类不能直接访问基类的私有成员,而必须通过基类方法进行访问;派生类需要自己的构造函数;派生类可以根据添加额外的数据成员和成员函数。
§ 基类指针可以在不进行显示类型转换的情况下指向派生类对象;基类引用可以在不进行显示类型转换的情况下引用派生类对象。这个仅单向性,反过来派生类的指针或引用不可以用于基类。(P488)
§当一个函数的形参为一个基类的引用时,它可以指向基类对象或派生类对象。若指向派生类对象,那么函数在被调用时会使用基类对象的复制构造函数。(P489)
§编译器对非虚方法使用静态联编,对虚方法使用动态联编。(P503)
§析构函数应当是虚函数,除非类不用做基类。(P505)
§友元不能是虚函数,因为友元不是类成员,而只有成员才能是虚函数。(P505)
§派生类对基类的某一函数的重新定义不等同于函数的重载。第一,如果重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型是基类引用或指针,则可以修改为指向派生类的引用或指针。第二,如果基类声明被重载了,则应在派生类中重新定义所有的基类版本。(P506)
只有plus(int a,int b)在D类里重新定义了才能继续使用。
相关文章推荐
- 求次方和
- C++中placement new操作符(经典)
- 从一简单程序看C语言内存分配
- C++的精髓——虚函数
- 用C++创建属于自己的类库?
- 脑上用VS2010编写的VC++程序(使用MFC库
- AndroidStudio 编译C/C++文件生成SO文件
- C#调用C++dll文件 运行提示找不到函数的入口点
- C++封装、继承、多态
- C++函数重定义、重载、重写
- VS2015 C#调试C++ dll时提示:“当前不会命中断点,因为还没有为该文档加载任何符号”解决方法From Eric Qu
- c++中struct使用注意事项
- <设计模式>系列汇总 By python and C++
- C语言实现龙贝格求积
- OJ上 G++ 与 C++ 的区别
- c++调用fortran程序中遇到的问题
- C语言再学习之数据类型
- C++中内存分配详解
- 1010. Radix (25)
- C++ std::pair<>