#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; }
因为你没有提供默认构造函数,也就是LX()和CFX()这两个函数,由于Square是继承自LX和CFX的,所以构造Square对象的时候,他的构造函数会调用它基类的构造函数,但是你基类的构造函数却没有对应的构造函数让Square去调用,所以会出错。你试着添加LX()和CFX()两个构造函数,然后在里面对这两个类中的成员变量进行初始化就可以了。
Square(int a):CFX(a, 0),LX(a, 0, 0)
因为父类CFX和LX定义了构造函数,所以再没有默认的构造函数,所以必须显式调用它们的构造函数。
构造是不会继承的,这句话的意思是:子类对象不能 (用点的方式) 访问父类的构造。但不代表子类实例化时父类构造不会运行。
一句话,父类不能只写有参构造(无参被屏蔽了),若一定只写有参构造,那就必须 子类要显式调用父类的有参构造。 否则就会报错。
因为,除了上述情况外,子类会无条件的调用父类无参构造,若父类没有无参构造,所以就会报错。