我有3节课。我们称它们为A类,B类和C类。
C类继承自B类,B类继承自A类。(还有其他类继承自B类)
EG
classC -> classB -> classA
classD -> classB -> classA
classE -> classB -> classA
我想创建一个C类对象。
A类有一个变量'name' B类有一个变量'choice'
我希望C类对象的构造函数能够创建具有给定名称的对象。
这就是我完成我的.h文件的方式(显然不起作用)这些摘录来自相关的.h文件。我有一个.h文件和每个类的.cpp文件。
class classC: public classB {
public:
classC(string name):classA(name){}
};
class classB : public classA {
public:
classB(string name);
void setChoice();
string getChoice();
protected:
string choice;
};
class classA {
public:
classA();
classA(string name);
string getName();
virtual void setChoice();
protected:
string name;
};
.cpp文件的摘录如下:
ClassC **
classC::classC(string name) {}
void classC::setChoice() {
choice = "P";
}
ClassB **
classB::classB(string name):classA(name){}
string classB::getChoice(){
return choice;
}
void classB::setchoice(string newChoice){
choice = newChoice;
}
* ClassA *
classA::classA() {}
classA::classA(string aName):name(aName){}
string classA::getName() {
return name;
}
void classA::setSelection() {}
驱动:
classC* classC1 = new classC("tomato");
class1C->setChoice();
cout << "Name is " << classC1->getName() << endl;
cout << "Choice is " << classC1->getChoice() << endl;
我将setChoice方法设置为虚拟,因为我希望C类 - Z类中的每个类都有自己特定的setChoice函数。该项目的规范还规定必须在ClassA中声明此函数。
我收到一条错误,指出ClassB需要1个参数,并且没有提供任何参数。
有人可以指出我正确的方向。我没有想法。
答案 0 :(得分:4)
您的第一个错误是您必须在定义派生类之前定义基类。
第二个问题是你只能调用直接碱基的构建者。也就是说,在C类的构造函数中,您必须调用classB的构造函数,然后可以将参数传递给classA。所以完整的代码看起来像这样:
class classA {
public:
classA();
classA(string name);
string getName();
virtual void setChoice();
protected:
string name;
};
class classB : public classA {
public:
classB(string name): classA(name){}
void setChoice();
string getChoice();
protected:
string choice;
};
class classC: public classB {
public:
classC(string name):classB(name){}
};