字符指针与字符数组:
char * p = "harry";
char s[] = {H,a,r,r,y};
两者区别在于 p 是指针变量,可以被赋值为其他值,而s是常量,始终指向初始时候的值。
继承相关:
只要在派生类方法中调用基类同名方法,就必须将基类方法的全名写出来。
多态:
1.编译会在运行时确定特定调用的隐式参数类型。
2.声明虚函数的才能表现为多态。
3.注意切割是不可逆的。
B::print() using B::get_location()
D::get_location() virtual
当D调用print()时,由于D拥有自己的get_location(),因其为virtual,所以print()虽然
为B的方法,但其中的get_location却是 D::get_location()
4.重载是编译时根据参数类型来区分
5.基类中某虚函数与派生类中存在的函数名与参数都相同,则产生覆盖,运行时决定调用哪一个。
内存管理:
1.如果一个类没有默认构造函数,那么试图分配该类型的数组将产生错误;
2.调用默认构造函数时,不需要加圆括号 : String name;//已经调用默认构造函数
3.赋值运算符与拷贝构造函数功能类似,但应该考虑自赋值的问题
String& String::operator=(const String& right){
if(this != &right){
}
return this;
}
4.使用初始化比声明+赋值更高效,因为声明+赋值使用了多次构造函数以及赋值函数
String one;
one = "Bert";
String two;
two = one;
one += "and Ernie"
不如:
String one = "Bert";
String two = one;
two += "and Ernie";
高效
5.当声明了析构函数后,应该编写拷贝构造函数,否则会出现缓冲区过早删除
因为默认拷贝构造函数会产生共享缓冲区(即传递指针)
String a = "Fred";
{
String b = a;//如果不自定义拷贝构造函数,则默认拷贝构造函数将使缓冲区共享
}//b声明周期结束,调用析构函数,删除缓冲区,因为a与b共享,所以再调用a将出错
6.必须将基类析构函数声明为虚函数,派生类的析构函数才能被调用
阅读(408) | 评论(0) | 转发(0) |