11章 使用类
<climits><ctime>clock time <cctype><string><cstdlib>rand srand
void show() const;
默认情况下,将一个对象赋给另一个对象时,C++将把原对象的每个数据成员的内容复制到目标对象的相应的数据成员中。
静态常量static const int len=30这种技术只能声明值为整数或枚举的静态常量
操作符重载operator op(argument-list),不能重载的操作符:
sizeof . .* :: ?: typeid const_cast dynamic_cast reinterpret_cast static_cast 只能通过成员函数重载的操作符:
= () [] -> 友元friend operator op(argument-list)
关闭自定义类的自动类型转换explicit Stonewt(double lbs);
转换函数operator typename() operator int() const;
第12章 类和动态内存分配
隐式成员函数
默认构造函数,复制构造函数,赋值操作符,默认析构函数,地址操作符
new和delete必须兼容new对应于delete,new[]对应于delete[];
delete可用于空指针
第13章 类继承
不可以将基类对象和地址赋值给派生类对象和引用
virtual: 如果没有virtual,程序将根据引用类型或指针类型选择方法;如果使用了virtual,程序将根据引用或指针指向的对象的类型来选择方法。
为基类声明一个虚拟析构函数也是一种惯例
要在派生类中重新定义基类方法,则将它设置为虚拟方法;否则,设置为非虚拟方法
处理虚拟函数的方法:给每个对象添加一个隐藏成员保存一个指向函数地址数组的指针(虚拟函数表virtual function table vtbl)
重新定义继承的方法并不是重载。如果在派生类中重新定义函数,将不是使用相同的函数特征标覆盖基类函数,而是隐藏同名的基类方法,不管参数特征表如何。这引出了两条规则:
第一,如果重新定义继承的方法,应确保与原来的原型完全相同,但如果返回类型是基类引用或指针,则可修改为派生类的引用或指针(并不是所用编译器能识别,且只适用于返回值,而不适用于参数)。
第二,如果基类声明被重载了,则应在派生类中重新定义所有的基类版本。如果只重新定义一个,则其他的奖杯隐藏,派生类对象将无法使用它们。
纯虚函数结尾处=0;