• c++子类继承父类的构造函数


    #include <iostream>
    using namespace  std;
    class Parent
    {
    public:
        /*
        此类父类写出了一个有参的构造函数
        这子类必须写出构造函数*/
        Parent(int a,int b){
            x=a;
            y=b;
            cout<<"执行基类的构造函数parent"<<endl;
        }
        void Print(){
            cout<<"x="<<x<<endl<<"y="<<y<<endl;
        }
    private:
        int x,y;
        
    };
    class Child :public Parent{
    public: 
        Child(int a,int b,int c):Parent(a,b){
            x=a;
            y=b;
            z=c;
            cout<<"执行派生类的构造函数child"<<endl;
        }
        void Print_1()
        {
            Print();
            cout<<"z="<<z<<endl;
            cout<<x<<endl;
            cout<<y<<endl;
        }
    private: 
        int z,a;
        int x,y;
    
    
    };
    int main(){
        Child ob(1,2,3);
        ob.Print_1();
        return 0;
    }

    一,父类没有写出构造函数,
    子类的构造函数可以写成“任何”形式而不用顾及父类的构造函数。
    例如:父类为CA,子类为CB,父类中没有写出任何构造函数,则子类中可以不写构造函数,或者构造函数可以写成以下几种:
    CB(){};
    CB():CA(){};
    CB(int a, int b){};
    CB(int a, int b):CA(){};
    这几种形式都可以。即完全忽略父类的构造函数。
    二,父类只写出了一个无参构造函数。
    则子类可以不写构造函数,或者写成以下几种。
    CB(){};
    CB():CA(){};
    CB(int a, int b){};
    CB(int a, int b):CA(){};
    即当父类只写出一个无参构造函数或者没有写构造函数效果是一样的。
    三,父类只写出了一个有参构造函数
    此时,子类应该“标准”地写出构造函数,例如
    CA(int a, int b){};
    CB(int a, int b):CA(a,b){};
    或者:
    CA(int a, int b){};
    CB(int a, int b ,int c):CA(a,b){};
    四,父类有多个有参构造函数,
    此时,子类最少实现一个父类的构造函数即可。
    五,父类有多个有参函数和一个无参构造函数。
    此时,子类只需实现一个父类的构造函数即可,不管子类实现的是有参构造函数还是无参构造函数。
    这时候应该注意,即使子类写成CB(){};也是正确的,说明父类的无参构造函数可以忽略。甚至写成CB(int a, int b){};也是正确的。
    总结以上几条可以归纳出C++子类继承父类时构造函数的写法的规律为:
    1,当父类有显式写出的构造函数时,子类最低限度的实现父类中的一个。
    2,当父类没有显式写出构造函数时,子类可以不写构造函数或者“自由”书写构造函数。
    更为普遍的规律总结如下:子类的构造函数以最少满足父类的一个构造函数为准。

     
    0
  • 相关阅读:
    NET基础课--NET的一些概念0
    项目异常及处理方法记录
    个人总结
    NuGet学习笔记(4)—— 实践
    NuGet学习笔记(3)——搭建属于自己的NuGet服务器(转)
    NuGet学习笔记(2)——使用图形化界面打包自己的类库(转)
    NuGet学习笔记(1)——初识NuGet及快速安装使用(转)
    关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
    <iOS>UIImage变为NSData并进行压缩
    iOS 将NSArray、NSDictionary转换为JSON格式进行网络传输
  • 原文地址:https://www.cnblogs.com/zhangyanguang/p/4907164.html
Copyright © 2020-2023  润新知