c++中为什么基类中只有带参数的构造函数时,派生类中一定要显示定义构造函数,并写出基类的构造函数及参数

如题所述

你的说法本来就是不对的。其实c++无论基类和派生类总是有构造函数,当你不显式的写构造函数时系统自动提供默认构造函数。
你问的问题意思是:
如果基类的构造函数带参数,那么派生类的构造函数必须显式的写构造函数,给基类的构造函数的参数赋值!
基类的构造函数不带参数时派生类的构造函数可以不有程序员写出来,有系统默认提供。
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-04-10
因为创建派生类对象时要调用基类的构造函数,当基类没有定义构函数时就调用默认无参数的构造函数。当只定义了有参的构造函数时就调用有参的构造函数,所以当派生类没有给基类传递参数时就会出现错误。解决方法:可以在基类中重载一个无参构造函数,或者给有参构造函数的参数设置默认值。

c++中为什么基类中只有带参数的构造函数时,派生类中一定要显示定义构造...
因为创建派生类对象时要调用基类的构造函数,当基类没有定义构函数时就调用默认无参数的构造函数。当只定义了有参的构造函数时就调用有参的构造函数,所以当派生类没有给基类传递参数时就会出现错误。解决方法:可以在基类中重载一个无参构造函数,或者给有参构造函数的参数设置默认值。

在c++中为什么基类不缺省构造时候派生类要调用基类构造函数进行初始化...
首先,C++本身就规定创建子类对象的时,先调用基类的构造函数,然后再调用自己类的构造函数。当我们的基类没有自己定义构造函数时候(就是系统默认的构造函数)时。创建子类对象会先默认调用基类的默认构造函数。但是,当我们的基类自己定义了构造函数,(可能定义了很多个)此时不会再自动生产默认构造。但是...

...有指针类型的成员变量时,一定要重写拷贝构造函数和赋值运算符,不要...
默认的拷贝构造函数和赋值函数是浅拷贝 相当于两个对象的成员指针变量共同指向一片内存首地址,这样会导致当一个对象修改这片内存时 另外一个对象也会受到影响 可以参考下这篇文章http:\/\/blog.csdn.net\/bluescorpio\/article\/details\/4322682

C++提供了默认版本的构造函数和析构函数,为什么还需要用户自定义构造...
构造函数是用来初始化成员变量的,而析构函数用来用来释放空间的<若是成员变量有动态开辟空间的,需要直接自己写析构,否则内存泄露>

C++的基类和派生类构造函数
因此,C++中通过派生类创建对象时必须调用基类构造函数,这是语法要求。若未指明调用基类的构造函数,系统默认会调用基类的默认构造函数(不带参数的构造函数)。若基类中未定义默认构造函数,则编译失败。下面的示例展示了这种规则:运行结果:xxx的年龄是0,成绩是0。运行结果:小明的年龄是16,成绩是90....

c++ 中规定:当派生类构造函数初始化时,必须同时对基类构造函数初始化...
构造一个对象是从内向外构造的,也就是先构造基类,再构造派生类。因此必须在派生类构造函数执行前先执行基类构造函数。你的那个例子因为构造函数都是最简单的无参数类型,所以无所谓,不需要额外明白的写出来,C++会默认帮你调用无参数的base()。实际上完整的写法应该是这样的:class follow { public:fo...

关于C++中用虚基类解决二义性问题
那时因为base类里面没有默认构造函数只有一个复制构造函数。你在base的public成员里面加一个构造函数就行了 base(){};

C++类中为什么只有构造函数和拷贝构造函数有参数列表?
一是形式。构造函数有不同的参数表,这样你在用类去构造,建立新对象时,你可以通过不同的形式来完成初始化。比如,你可以:SomeClass obj1,obj2(1,2,3);SomeClass obj3(obj1);这样,可以完成不同形式的初始化。但对应的对象的析构,如果这个类对象是自动变量,它就自动在其自动作用域结束的地方...

c++什么叫构造函数,它的作用是什么
\/\/ 复制构造函数(也称为拷贝构造函数) \/\/ 复制构造函数参数为类对象本身的引用,用于根据一个已存在的对象复制出一个新的该类的对象,一般在函数中会将已存在对象的数据成员的值复制一份到新创建的对象中 \/\/ 若没有显示的写复制构造函数,则系统会默认创建一个复制构造函数,但当类中有指针成员时,由系统默认创建...

C++中派生类的构造函数怎么显式调用基类构造函数?
CLSA(10);\/\/这里显式调用基类构造函数给临时对象进行赋值的,但是等CLS构造函数退出返回后,临时对象丢失。所以, 这个函数没有给真正的对象赋值。因为没有取得正确的this地址。} int main(){ CLS obj(2,3);cout << obj.m_i << endl; \/\/输出结果是什么?CLSA(j),cout<<obj.getA();return ...

相似回答
大家正在搜