C++中派生函数

class 派生类名 : 继承方式 基类名

{

    派生类的成员

};

继承方式:public、private和protected,默认处理是public。

继承方式 说明
public 基类的public和protected的成员被派生类继承后,保持原来的状态
private 基类的public和protected的成员被派生类继承后,变成派生类的private成员
protected

基类的public和protected的成员被派生类继承后,变成派生类的protected成员

注:无论何种继承方式,基类的private成员都不能被派生类访问。从上面的表中可以看出,声明为public的方法和属性可以被随意访问;声明为protected的方法和属性只能被类本身和其子类访问;而声明为private的方法和属性只能被当前类的对象访问。

默认为private继承方式,不过最好写上。

### C++ 派生类构造函数的初始化过程与用法 在 C++ 中,派生类的构造函数需要负责初始化派生类成员以及调用基类的构造函数来完成基类部分的初始化。整个初始化过程遵循一定的顺序和规则。 #### 1. 构造函数的调用顺序 C++ 规定,在派生类对象创建时,首先会调用基类的构造函数[^2],然后执行派生类自身的构造函数。如果基类没有默认构造函数,则必须显式地通过派生类构造函数的初始化列表指定调用哪个基类构造函数。 #### 2. 初始化列表的作用 初始化列表用于在构造函数中初始化成员变量或调用基类构造函数。例如: ```cpp class Base { public: Base(int x) : mbase(x) { std::cout << "Base constructor called with " << x << std::endl; } private: int mbase; }; class Derived : public Base { public: Derived(int x, int y) : Base(x), mderived(y) { std::cout << "Derived constructor called with " << y << std::endl; } private: int mderived; }; ``` 上述代码中,`Derived` 类的构造函数通过初始化列表 `Base(x)` 显式调用了基类的构造函数,并初始化了派生类的成员变量 `mderived`[^3]。 #### 3. 异常处理 在派生类构造过程中,如果基类或派生类的构造函数抛出异常,则整个对象的创建过程会失败。因此,合理的异常管理是必要的。可以通过捕获异常并进行处理来确保程序的健壮性[^1]。 #### 4. 示例代码 以下是一个完整的示例,展示派生类构造函数的用法及其初始化过程: ```cpp #include <iostream> using namespace std; class Base { public: Base(int data = 5) : mbase(data) { cout << "Base(" << mbase << ")" << endl; } ~Base() { cout << "~Base()" << endl; } private: int mbase; }; class Derived : public Base { public: Derived(int data = 10) : Base(data), mderived(data * 2) { cout << "Derived(" << mderived << ")" << endl; } ~Derived() { cout << "~Derived()" << endl; } private: int mderived; }; int main() { Derived d(20); // 调用基类和派生类的构造函数 return 0; } ``` 运行结果如下: ``` Base(20) Derived(40) ~Derived() ~Base() ``` 从输出可以看到,基类的构造函数先被调用,接着是派生类的构造函数。析构函数的调用顺序则相反[^4]。 #### 5. 注意事项 - 如果基类没有默认构造函数,则派生类必须显式调用基类的某个构造函数。 - 在初始化列表中,基类构造函数的调用优先于派生类成员变量的初始化。 - 构造函数不能被继承,但可以被重载。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值