氯的平方 2020-09-05 21:48 采纳率: 100%
浏览 140
已采纳

关于基类中的构造函数被继承的问题

在书上说的是基类不能被派生类自动继承,需要使用using声明来复用
但是就在这页的前一页,有一篇代码中的构造函数的初始化列表中就用到了基类的构造函数来初始化从基类中继承得到到的数据成员,这不是互相矛盾吗,没有被继承的函数怎么可以随意调用呢?

  • 写回答

2条回答 默认 最新

  • 蒋晟 2020-09-06 00:15
    关注

    继承是说成为派生类的成员。除了构造函数、重载的操作符和友元这样的例外之外,一般成员都被派生类继承。没有被继承并不意味着成员就不能被派生类调用,比如

    class Base{
      public:void f();
      public:void f(int a, int b);
    };
    
    class Derived : public Base
    {  
      public:void f(double c){ Base::f();}
    };
    Derived derived;
    
    derived.f();//编译错误
    derived.f(1,3);//编译错误
    derived.f(3);//正确
    derived.Base::f();//正确
    

    可以用using来继承基类的同名函数

    
    class Derived : public Base
    {  
      public:void f(double c);
      using Base::f;
    };
    Derived derived;
    derived.f();//正确
    derived.f(1,3);//正确
    derived.f(3);//正确
    

    这个语法在C++03里对构造函数无效。C++11引入了构造函数继承,使得这个using语法也对构造函数有效。前提是你知道这么用的后果。

    class Base {
        Base(int) { }
    };
    Class Derived : public Base {
        using Base::Base;
        int x;
    };
    
    Derived derived (0);    // 不定义行为,x没有被初始化
    Derived derived ;       // 编译错误,Derived没有一个无参构造函数。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。