继承机制中构造函数的写法

在继承机制中,派生类的构造函数需要负责完成两个方面的工作:

  1. 自身成员的初始化: 构造函数负责初始化派生类自己的成员变量。
  2. 基类构造函数的调用: 构造函数要调用基类的构造函数,确保基类的成员得到正确的初始化。

构造函数的写法与普通的成员函数类似,但有一些特殊的注意事项。以下是一些示例:

1. 默认构造函数:

class Base {
public:
    Base() {
        // 基类构造函数的初始化工作
    }
};

class Derived : public Base {
public:
    Derived() : Base() {
        // 派生类自身的初始化工作
    }
};

2. 带参数的构造函数:

class Base {
public:
    Base(int value) {
        // 基类构造函数的初始化工作,使用传入的参数 value
    }
};

class Derived : public Base {
public:
    Derived(int value1, int value2) : Base(value1) {
        // 派生类自身的初始化工作,使用传入的参数 value2
    }
};

3. 使用成员初始化列表:

在构造函数中使用成员初始化列表,可以更加简洁地初始化基类和派生类的成员:

class Base {
public:
    Base(int value) {
        // 基类构造函数的初始化工作
    }
};

class Derived : public Base {
public:
    Derived(int value1, int value2) : Base(value1), derivedMember(value2) {
        // 派生类自身的初始化工作
    }

private:
    int derivedMember;
};

在上述示例中,Derived 类使用了成员初始化列表,通过逗号分隔调用基类构造函数和派生类成员的构造函数。这种方式可以提高代码的效率,并且在某些情况下更有必要,特别是当成员是对象而不仅仅是基本数据类型时。

例题

  • 【问题描述】
    设计一个车类(Vehicle),数据成员有轮子个数(num)、车重(weight)。巴士类(Bus)是车类的私有派生类,包含载客数(pnum)。轿车类(Car)是巴士类的受保护派生类,包含载客重量(pweight)。每个类都有数据的输出方法。编写程序,通过轿车类对象输出轿车的轮子个数、车重、载客数和载客重量。
  • 【输入形式】
    依次输入轿车的轮子个数、车重、载客数和载客重量。
  • 【样例输入】
4 100 6 980
  • 【样例输出】
****轿车信息****
--------------------
 车轮数: 4
 车重量: 100
 载客量: 6
 载重量: 980
--------------------
  • 【说明】
    【样例输出】的每行数据后面没有空行。
  • 【AC代码】
#include  <iostream>  
  
using namespace std;  
  
class Vehicle {  
    int num;  
    float weight;  
public:  
    Vehicle(int n, float w) : num(n), weight(w) {}  
  
    void Print_v() {  
        cout << "车轮数: " << num << endl << "车重量: " << weight << endl;  
    }  
};  
  
class Bus : private Vehicle {  
    int pnum;  
public:  
    Bus(int n, float w, int p) : Vehicle(n, w), pnum(p) {}  
  
    void Print_p() {  
        Print_v();  
        cout << "载客量: " << pnum << endl;  
    }  
};  
  
class Car : protected Bus {  
    float pweight;  
public:  
    Car(int n, float w, int p, float pw) : Bus(n, w, p), pweight(pw) {}  
  
    void Show() {  
        cout << "--------------------" << endl;  
        Print_p();  
        cout << "载重量: " << pweight << endl;  
        cout << "--------------------" << endl;  
    }  
};  
  
int main() {  
    int num, weight, pnum, pweight;  
    cin >> num >> weight >> pnum >> pweight;  
    Car t(num, weight, pnum, pweight);  
    cout << "****轿车信息****" << endl;  
    t.Show();  
    return 0;  
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值