zoukankan      html  css  js  c++  java
  • 继承的构造函数

    在C++11新标准中,派生类能够重用其直接基类的构造函数

    #include <iostream>
    using namespace std;
    
    struct Base
    {
        Base() { cout << "construct" << endl; }
    };
    struct Derived : public Base
    {
        using Base::Base; //继承Base的构造函数
    };
    
    int main()
    {
    	Derived d;
    	return 0;
    }
    

    一个构造函数的声明不会改变该函数的访问级别

    #include <iostream>
    using namespace std;
    
    struct Base
    {
        Base() { cout << "construct" << endl; }
    };
    struct Derived : public Base
    {
       private://不会改变继承的构造函数的访问级别,仍然是public
         using Base::Base; 
    };
    
    int main()
    {
    	Derived d;
    	return 0;
    }
    

    当一个基类的构造函数含有默认实参,这些实参并不会被继承。相反,派生类将获得多个继承的构造函数

    #include <iostream>
    using namespace std;
    
    struct Base
    {
        Base(int x=1) { cout << "construct" <<x<< endl; }
    };
    struct Derived : public Base
    {
        //实际上继承了2个构造函数
         using Base::Base; 
    };
    
    int main()
    {
    	Derived d;
    	Derived d1(2);
    	return 0;
    }
    

    如果派生类定义的构造函数与基类的构造函数有相同的参数列表,该构造函数不会被继承

    #include <iostream>
    using namespace std;
    
    struct Base
    {
        Base() { cout << "construct" << endl; }
        Base(int) { cout << "construct int" << endl; }
    };
    struct Derived : public Base
    {
    
        using Base::Base;
        //不会继承Base的默认构造函数
        Derived() { cout << "Derived class construct" << endl; };
    };
    
    int main()
    {
        Derived d;
        Derived d(1);
        return 0;
    }
    
  • 相关阅读:
    利用序列化进行深度克隆
    原型链
    本地储存cookie,localStorage,sessionStorage
    ES6创建类
    hexo基本命令
    mouseent和mouseover的区别
    Event
    offset,client,scroll
    字符串的常用方法
    数组去重
  • 原文地址:https://www.cnblogs.com/lkpp/p/cpp-derived-construct.html
Copyright © 2011-2022 走看看