当前位置:编程学习 > C/C++ >>

第15章 面向对象编程(8)

15.4 构造函数和复制控制
构造函数和复制控制成员不能继承,每个类定义自己的构造函数和复制控制成员。
15.4.1基类构造函数和复制控制
某些类需要只希望派生类使用的特殊构造函数,这样的构造函数定义为protected。
15.4.2 派生类构造函数
派生类的构造函数受继承关系的影响,每个派生类构造函数除了初始化自己的数据成员之外,还要初始化基类。
1. 合成的派生类默认构造函数
派生类的合成默认构造函数与非派生的构造函数只有一点不同:除了初始化派生类的数据成员之外,它还初始化派生类对象的基类部分。基类部分由基类的默认构造函数初始化。
2. 定义默认构造函数
3. 向基类构造函数传递实参
派生类构造函数的初始化列表只能初始化派生类的成员,不能直接初始化继承成员。相反,派生类构造函数通过将基类包含在构造函数初始化列表中间接初始化继承成员。

class Base 

private: 
    int value1, value2; 
protected: 
    Base(int val1, int val2) 
    { 
        value1=val1; 
        value2=val2; 
    } 
}; 
 
class Child:Base 

private: 
    int value3; 
public: 
    Child(int val1,int val2,int val3):value3(val3),Base(val1,val2){} 
}; 
构造函数初始化列表为类的基类和成员提供初始值,它并不指定初始化的执行次序。首先初始化基类,然后根据声明次序初始化派生类的成员。
4. 在派生类构造函数中使用默认实参
5. 只能初始化直接基类
一个类只能初始化自己的直接基类。直接基类就是在派生列表中指定的类。
重构包括重新定义类层次,将操作和/或数据从一个类移到另一个类。为了适应应用程序的需要而重新设计类以便增加新函数或处理其他改变时,最有可能需要进行重构。
构造函数只能初始化其直接基类的原因是每个类都定义了自己的接口。一旦类定义了自己的接口,与该类对象的所有交互都应该通过该接口,即使对象是派生类对象的一部分也不例外。
同样,派生类构造函数不能初始化基类的成员且不应该对基类成员赋值。如果那些成员为public或protected,派生构造函数可以在构造函数函数体中给基类成员赋值,但是,这样做会违反基类的接口。派生类应通过使用基类构造函数尊重基类的初始化意图,而不是在派生类构造函数函数体中对这些成员赋值。

摘自 xufei96的专栏

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,