C++中的继承问题,“没有合适的默认构造函数可用”

2025-02-27 12:31:27
推荐回答(4个)
回答1:

#include

#include

usingnamespacestd;

classStudent

{

public:

Student(intn,stringnam)

{

num=n;

name=nam;

}

voiddisplay()

{

cout<<"num:"<

}

protected:

intnum;

stringname;

};

classStudent1:publicStudent

{

public:

Student1(intn1,stringnam1,inta):Student(n1,nam1)

{

age=a;

}

voidshow()

{

cout<<"Thisstudentis:"<

display();

cout<<"age:"<

}

private:

intage;

};

intmain()

{

Student1stud1(20120107,"Johnson",20);

stud1.show();

return0;

}

扩展资料

C++继承与构造函数:

#include

usingnamespacestd;

classObjectB

{

public:

ObjectB(intobjb):objb_(objb)

{

cout<<"ObjectB..."<

}

~ObjectB()

{

cout<<"~ObjectB..."<

}

intobjb_;

};

classObjectD

{

public:

ObjectD(intobjd):objd_(objd)

{

cout<<"ObjectD..."<

}

~ObjectD()

{

cout<<"~ObjectD..."<

}

intobjd_;

};

classBase

{

public:

Base(intb):b_(b),objb_(111)

{

cout<<"Base..."<

}

Base(constBase&other):objb_(other.objb_),b_(other.b_)

{

}

~Base()

{

cout<<"~Base..."<

}

intb_;

ObjectBobjb_;

};

classDerived:publicBase

{

public:

Derived(intb,intd):d_(d),Base(b),objd_(222)

{

cout<<"Derived..."<

}

Derived(constDerived&other):d_(other.d_),objd_(other.objd_),Base(other)

{

}

~Derived()

{

cout<<"~Derived..."<

}

intd_;

ObjectDobjd_;

};

intmain(void)

{

Derivedd(100,200);

cout<

Baseb1(100);

Baseb2(b1);

cout<

Derivedd2(d);

return0;

}

回答2:

因为你没有提供默认构造函数,也就是LX()和CFX()这两个函数,由于Square是继承自LX和CFX的,所以构造Square对象的时候,他的构造函数会调用它基类的构造函数,但是你基类的构造函数却没有对应的构造函数让Square去调用,所以会出错。你试着添加LX()和CFX()两个构造函数,然后在里面对这两个类中的成员变量进行初始化就可以了。

回答3:

Square(int a):CFX(a, 0),LX(a, 0, 0)
因为父类CFX和LX定义了构造函数,所以再没有默认的构造函数,所以必须显式调用它们的构造函数。

回答4:

构造是不会继承的,这句话的意思是:子类对象不能 (用点的方式) 访问父类的构造。但不代表子类实例化时父类构造不会运行。
一句话,父类不能只写有参构造(无参被屏蔽了),若一定只写有参构造,那就必须 子类要显式调用父类的有参构造。 否则就会报错。
因为,除了上述情况外,子类会无条件的调用父类无参构造,若父类没有无参构造,所以就会报错。