[go: up one dir, main page]

矜(bai)持(gei)的云拏 2023-10-19 17:10 采纳率: 81.3%
浏览 4
已结题

C++类继承,关于构造函数的问题。

问题:为什么父类必须要有无参构造函数才能通过编译?
代码如下


#include<iostream>
using namespace std;
class A
{
    public:
    int x;
    A(){}//去掉这句就不可通过编译
    A(int i):x(i){}
};
class B:public A
{
    public:
    B(int j)
    {x= j;}
};
int main()
{
    return 0;
}

或者需要如下代码,才能通过


#include<iostream>
using namespace std;
class B
{
    public:
    int x;
    B(int i):x(i){}//“:”后对应的是基类的构造函数以及对象成员对应的参数初始化
};
class A:public B
{    int a;
    public:
      A(int j):a(j*10),B(2)
      {cout<<"B::x="<<x<<"A::a="<<a<<endl;}
};
int main()
{
    A d(1);
}

我的疑惑是,对于代码一,去掉A的构造函数为何就不可编译过?
对于代码二,为何去掉B(2),并对x赋值后,却不能编译过?B(2)不也是对x赋值吗?

  • 写回答
1条回答 默认 最新
  • 关注

    对于代码一,去掉A的构造函数为何就不可编译过?

    当你自己写一个构造函数, 默认构造函数就不会自动生成了。但B构造又调用A的默认构造。

    对于代码二,为何去掉B(2),并对x赋值后,却不能编译过?B(2)不也是对x赋值吗?

    B(2)不叫对x赋值,它叫调用构造函数。如果你在大括号中给x赋值,又回到上一个问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月19日
  • 已采纳回答 10月19日
  • 修改了问题 10月19日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 KeiI中头文件找不到怎么解决
  • ¥15 QT6将音频采样数据转PCM
  • ¥15 本地安装org.Hs.eg.dby一直这样的图片报错如何解决?
  • ¥15 下面三个文件分别是OFDM波形的数据,我的思路公式和我写的成像算法代码,有没有人能帮我改一改,如何解决?
  • ¥15 Ubuntu打开gazebo模型调不出来,如何解决?
  • ¥100 有chang请一位会arm和dsp的朋友解读一个工程
  • ¥50 求代做一个阿里云百炼的小实验
  • ¥15 查询优化:A表100000行,B表2000 行,内存页大小只有20页,运行时3页,设计两个表等值连接的最简单的算法
  • ¥15 led数码显示控制(标签-流程图)
  • ¥20 为什么在复位后出现错误帧