1、在类定义中定义的成员函数会被自动当作内联函数。
2、书中P30:“每个类对象在被程序最后一次使用之后,它的析构函数就会被自动调用”。本人认为这句话多少有些误导作用。看下面一段程序:
#include <iostream.h>
class test
{
public:
test() {};
~test() {
cout << "End test!" << endl;
}
void print() {
cout << "print()" << endl;
}
};
int main()
{
test t;
t.print();//最后一次使用
cout << "Code end!" << endl;
return 0;
}
如果按照书中所说,那么输出应该为:
print()
End test!
Code end!
但是在VC++ 6下结果为:
print()
Code end!
End test!
所以,析构函数应该在类对象被释放时被调用。
3、放在C++源文件中的成员函数不用随每个使用相关类的程序而重新编译,它们经过预编译之后被保存在类库中。
4、构造函数和析构函数既不构造也不销毁类的对象(编译器自动把它们作用到这些对象上)。在构造函数被应用之前,用于维护类中数据成员的内存已经被分配了。类的构造函数主要用来初始化类对象的数据成员,析构函数主要负责释放类对象在生命期内申请到的所有资源。
5、效率与功能往往是不可兼得的。
6、在类的保护区域内的数据成员和成员函数,不提供给一般的程序,只提供给派生类。放在基类的私有区域内的成员只能供该类自己使用,派生类不能使用。
7、虚拟函数调用的决定要等到运行时刻。
8、如果派生类没有引入需要析构的数据成员,那么无需显式的提供析构函数。(因为都由其基类的析构函数处理了。)
9、虚拟函数不能内联,因为内联是发生在编译时刻的,所以虚拟函数的效率相对于非虚拟函数要低。
10、异常是在运行时刻发生。
11、如果new失败,标准库将产生bad_alloc标准异常。
12、缺省情况下,terminate()结束程序。
13、建议使用带有精细选择功能的using声明代替using指示符。
14、要使用泛型算法,需要头文件:
#include <algorithm>