第十四章

来源:互联网 发布:js 判断是不是数组 编辑:程序博客网 时间:2024/05/01 14:26
1.string经常是用作组合对象的,使用自定义的组合对象,语法是一样的,访问控制是限制是层层延续的
2.初始化列表中:基类用类名再是组合对象用对象名
3.int *ip=new int(47);这使得内建类型的操作有点类似于对象。但这并不是真正的构造函数
4.首先调用基类构造函数,再调对象成员,调用次序是声明时的顺序
5.operator=不能被继承走
6.定义了任何构造函数,系统就不会自动生成默认的了
7.自动类型变换运算能被继承
8.判断使用继承还是组合,得看看新类是旧类组合的还是旧类的特化
9.对私有继承成员公有化,当私有继承时,基类的所有public成员都变成了private。如果希望它们中的任何一个是可视的,只要用派生类的public部分声明他们的名字即可
//: C14:PrivateInheritance.cpp
class Pet {
public:
  char eat() const { return 'a'; }
  int speak() const { return 2; }
  float sleep() const { return 3.0; }
  float sleep(int) const { return 4.0; }
};
class Goldfish : Pet { // Private inheritance
public:
  Pet::eat; // Name publicizes member、、、、、、、、、、、、、
  Pet::sleep; // Both overloaded members exposed、、、、、、、、、、、
};
int main() {
  Goldfish bob;
  bob.eat();
  bob.sleep();
  bob.sleep(1);
//! bob.speak();// Error: private member function
} ///:~
10.保护继承是不常用的,它的存在只是为了语言的完备性
11.除了赋值运算符以外,其余的运算符可以自动地继承到派生类中。
12.从派生类到基类的类型转换,在继承图上是上升的,所以它一般称为向上类型转换
13.向上类型转换会调用拷贝构造函数
14.class Child : public Parent {
 ///...........
  friend ostream&
    operator<<(ostream& os, const Child& c){
    return os << (Parent)c <<endl;//将调用parent的拷贝构造函数
    ///return os << (Parent&)c <<endl;//不调用拷贝构造函数,一般用这种形式
  }
15.系统可自动生成的4个函数:默认构造函数,拷贝构造函数,operator =和析构函数
16.确定使用组合还是继承的最清楚的方法之一是询问是否需要从新类向上类型转换,是否要使用多态性!
17.































原创粉丝点击