在C ++中初始化派生类参数

鲍比
#include <iostream>
class A {

    int x, y;

public: 
    A(int _x = 0, int _y = 0) : x(_x), y(_y) {
        std::cout << "Constructeur de A \n";
        std::cout << "x = " << x << ", y= " << y << std::endl;
    }

};
class B : A {

    int d; 

public: B(int x, int y, int _d=2) : A(x,y), d(_d) {
    std::cout << "Constructeur de B \n";
    std::cout << "d = " << d<< std::endl;
}


};

所以我有上面的代码无法编译。我的问题是为什么不d初始化Base类参数就不能初始化就像说我不能让用户仅提供一个值d并使用基类默认参数(我发现再次初始化基类参数是多余的,如果我想将默认值更改为其他值会很有意义)。 。错误消息并不能告诉我太多'B': no appropriate default constructor available

来自莫斯科的弗拉德

如果要删除错别字并添加带有B类一个参数的构造函数,则代码将成功编译

#include <iostream>

class A {

    int x, y;

public: 
    A(int x = 0, int y = 0) : x(x), y(y) {
        std::cout << "Constructeur de A \n";
        std::cout << "x = " << x << ", y= " << y << std::endl;
    }

};

class B : A {

    int d; 

public:
    B( int d ) :d( d ) 
    {
        std::cout << "Constructeur de B( int ) \n";
        std::cout << "d = " << d<< std::endl;
    }        
    B(int x, int y, int d=2) : A(x,y), d(d) 
    {
        std::cout << "Constructeur de B( int, int, int ) \n";
        std::cout << "d = " << d<< std::endl;
    }
};    

int main()
{
    B b( 1 );

    return 0;
}

它的输出是

Constructeur de A 
x = 0, y= 0
Constructeur de B( int ) 
d = 1

A类具有默认构造函数。它唯一明确定义的构造函数是该类的默认构造函数。

该代码还使用在线MS C ++编译器进行编译。

至于这个错误信息

'B':没有合适的默认构造函数

那么B类确实没有默认构造函数。但是,例如,您可以通过以下方式重新定义其构造函数

    B( int d = 0 ) :d( d ) 
    {
        std::cout << "Constructeur de B( int ) \n";
        std::cout << "d = " << d<< std::endl;
    }        

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中初始化派生类参数

来自分类Dev

C ++-在派生类中静态初始化基类保护的成员变量

来自分类Dev

C ++模板和派生类成员初始化

来自分类Dev

初始化之前,C ++派生类在基类上调用方法

来自分类Dev

派生类的C++初始化列表编译失败,为什么?

来自分类Dev

c ++ 1y将允许派生类对基类变量进行类内初始化吗?

来自分类Dev

在C ++中编写初始化类

来自分类Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

来自分类Dev

为什么C ++要求我在初始化列表中重复基类的模板参数?

来自分类Dev

如何避免在C ++中的派生类中重复基类构造函数参数?

来自分类Dev

C#根据参数类型实例化基础构造函数的派生类

来自分类Dev

将参数限制为C ++中的特定类和派生类

来自分类Dev

C ++派生类

来自分类Dev

派生类C ++

来自分类Dev

在 C# 中使用基类和派生类实例化数组中的对象

来自分类Dev

c#继承了方法参数中带有派生类的接口

来自分类Dev

在初始化列表中初始化类数组C ++

来自分类Dev

C ++在初始化列表中的基类初始化之前调用函数

来自分类Dev

在 C# 中,类的属性是并发初始化还是顺序初始化?

来自分类Dev

使用继承在C ++中初始化参数

来自分类Dev

C ++函数参数中的“初始化器值太多”

来自分类Dev

错误:<variable> 的参数在 C 中初始化

来自分类Dev

C ++中类数组成员的初始化

来自分类Dev

在类构造函数中初始化const向量(C ++)

来自分类Dev

C#在类中初始化静态列表

来自分类Dev

如何在C ++中重新初始化基类

来自分类Dev

类中的C ++数组未正确初始化

来自分类Dev

如何改善C#中的类对象初始化?

来自分类Dev

C ++ 11中类数据成员的默认初始化

Related 相关文章

  1. 1

    在C ++中初始化派生类参数

  2. 2

    C ++-在派生类中静态初始化基类保护的成员变量

  3. 3

    C ++模板和派生类成员初始化

  4. 4

    初始化之前,C ++派生类在基类上调用方法

  5. 5

    派生类的C++初始化列表编译失败,为什么?

  6. 6

    c ++ 1y将允许派生类对基类变量进行类内初始化吗?

  7. 7

    在C ++中编写初始化类

  8. 8

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  9. 9

    为什么C ++要求我在初始化列表中重复基类的模板参数?

  10. 10

    如何避免在C ++中的派生类中重复基类构造函数参数?

  11. 11

    C#根据参数类型实例化基础构造函数的派生类

  12. 12

    将参数限制为C ++中的特定类和派生类

  13. 13

    C ++派生类

  14. 14

    派生类C ++

  15. 15

    在 C# 中使用基类和派生类实例化数组中的对象

  16. 16

    c#继承了方法参数中带有派生类的接口

  17. 17

    在初始化列表中初始化类数组C ++

  18. 18

    C ++在初始化列表中的基类初始化之前调用函数

  19. 19

    在 C# 中,类的属性是并发初始化还是顺序初始化?

  20. 20

    使用继承在C ++中初始化参数

  21. 21

    C ++函数参数中的“初始化器值太多”

  22. 22

    错误:<variable> 的参数在 C 中初始化

  23. 23

    C ++中类数组成员的初始化

  24. 24

    在类构造函数中初始化const向量(C ++)

  25. 25

    C#在类中初始化静态列表

  26. 26

    如何在C ++中重新初始化基类

  27. 27

    类中的C ++数组未正确初始化

  28. 28

    如何改善C#中的类对象初始化?

  29. 29

    C ++ 11中类数据成员的默认初始化

热门标签

归档