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;
    }
    
  • 相关阅读:
    Pyramid of Glasses 酒杯金字塔 [CF-676B]
    BZOJ 2456mode
    Hamburgers [CF-371C]
    lowbit
    two point
    大O表示法的理解
    6. 第 6 章 队列
    5. 第 5 章 栈
    3. 第 3 章 向量
    10. 第 10 章 指针
  • 原文地址:https://www.cnblogs.com/lkpp/p/cpp-derived-construct.html
Copyright © 2011-2022 走看看