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;
    }
    
  • 相关阅读:
    VUE组件间传参
    JS-03 (RegExp对象&字符串总结)
    JS-02 (字符串的正则函数)
    理解 C++ 的 Memory Order
    GCC的原子操作函数
    barrier内存屏障
    tcp重传机制,流量控制,拥塞控制
    TCP 的拥塞控制
    Monitoring and Tuning the Linux Networking Stack: Receiving Data
    kernel网络之软中断
  • 原文地址:https://www.cnblogs.com/lkpp/p/cpp-derived-construct.html
Copyright © 2011-2022 走看看