2

我有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 文件的摘录如下:

C类**

classC::classC(string name) {}

void classC::setChoice() {
choice = "P";
}

B类**

classB::classB(string name):classA(name){}

string classB::getChoice(){
    return choice;
}

void classB::setchoice(string newChoice){
    choice = newChoice;
}

* A类*

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 方法,因为我希望 Class C - Class Z 中的每个类都有自己特定的 setChoice 函数。该项目的规范还规定该函数必须在 ClassA 中声明。

我收到一条错误消息,指出 ClassB 需要 1 个参数,但没有提供任何参数。

有人可以指出我正确的方向。我没主意了。

4

1 回答 1

4

您的第一个错误是您必须在定义派生类之前定义基类。

第二个问题是你只能调用直接基的构造函数。也就是说,在类 C 的构造函数中,你必须调用类 B 的构造函数,然后它可以将参数传递给类 A。所以完整的代码如下所示:

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){}
};
于 2012-08-19T09:33:28.153 回答