• C++ 基类和派生类的构造函数以及析构函数


    基类和派生类的构造函数

    类的构造函数不能被继承,为什么?

    因为即使被继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数。

    大部分基类中都有private属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化。怎么办?

    在派生类的构造函数中调用基类的构造函数。
    派生类构造函数总是先调用基类构造函数再执行其他代码。

    #include<iostream>
    #include<string> 
    using namespace std;
    
    //基类People
    class People{
    protected:
        string m_name;
        int m_age;
    public:
        People(string, int);
    };
    People::People(string name, int age): m_name(name), m_age(age){}
    
    //派生类Student
    class Student: public People{
    private:
        float m_score;
    public:
        Student(string name, int age, float score);
        void display();
    };
    //People(name, age)就是调用基类的构造函数
    Student::Student(string name, int age, float score): People(name, age), m_score(score){ }
    void Student::display(){
        cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<"。"<<endl;
    }
    int main(){
        Student stu("小明", 16, 90.5);
        stu.display();
        return 0;
    }
    

    构造函数的调用顺序是按照继承的层次自顶向下、从基类再到派生类。派生类构造函数只能调用直接基类的构造函数。

    基类和派生类的析构函数

    析构函数也不能被继承,与构造函数不同的是,在派生类的析构函数中不用显式的调用基类的析构函数,因为每个类只有一个析构函数,编译器直到如何选择。

    销毁派生类对象是,先执行派生类析构函数,再执行基类析构函数。

  • 相关阅读:
    Jenkins
    ssh 免登录
    linux 远程执行命令
    Java WEB 笔记
    如何用新安装的jdk替换掉Linux系统默认jdk
    修改 File --> New 菜单内容
    java.security.NoSuchAlgorithmException: AES KeyGenerator not available
    JDK历史版本下载地址
    maven 核心概念
    spring boot: ConfigurationProperties
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12350114.html
Copyright © 2020-2023  润新知