【发布时间】:2014-12-09 13:47:14
【问题描述】:
根据我的理解,如果我们指定参数化构造函数,那么编译器不会为我们创建默认构造函数,只有当我们创建没有任何参数的对象时我们才需要默认构造函数(如果我声明了一个参数化构造函数并通过传递参数创建了一个对象那么编译器不会给出错误)。我在下面的代码中做了同样的事情,我创建了参数化构造函数并通过传递参数创建了一个对象,但出现错误。
#include <iostream>
using namespace std;
class Animal
{
public :
int var;
Animal(int i)
{
cout << "Animal Ctr " << endl;
}
};
class Cat:public Animal
{
public:
Cat()
{
cout << "Cat Ctr " << endl;
}
};
int main ()
{
Animal a(5);
return 0;
}
如果我不继承基类但在我继承基类时遇到错误,上面的代码对我来说可以正常工作
DrivedMemberwithBasePointer_forum.cc:在构造函数Cat::Cat()':
DrivedMemberwithBasePointer_forum.cc:17: no matching function for call to
动物::动物()'
DrivedMemberwithBasePointer_forum.cc:4:候选人是:Animal::Animal(const
动物&)
DrivedMemberwithBasePointer_forum.cc:8: Animal::Animal(int)
据我所知,当我创建基类的对象时,编译器不会调用驱动类对象,但会在上面调用它的代码。 ., 请任何人澄清我的困惑。
【问题讨论】:
标签: c++ inheritance constructor