2

私は3つのクラスを持っています。それらをクラスA、クラスB、クラスCと呼びましょう。

クラス C はクラス B を継承し、クラス B はクラス A を継承します (クラス B を継承するクラスは他にもあります)。

EG
classC -> classB -> classA
classD -> classB -> classA
classE -> classB -> classA

クラス C オブジェクトを作成したい。

クラス A には変数 'name' があります クラス B には変数 'c​​hoice' があります

クラス 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;

クラスCからクラスZまでの各クラスに独自の特定のsetChoice関数を持たせたいので、setChoiceメソッドを仮想として設定しました。このプロジェクトの仕様にも、この関数は ClassA で宣言する必要があると記載されています。

ClassB には 1 つの引数が必要で、何も指定されていないというエラーが表示されます。

誰かが私を正しい方向に向けてください。私はアイデアがありません。

4

1 に答える 1

4

最初のエラーは、派生クラスを定義する前に基本クラスを定義する必要があることです。

2 つ目の問題は、直接ベースのコンストラクタしか呼び出せないことです。つまり、クラス 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){}
};
于 2012-08-19T09:33:28.153 に答える