-2

子関数を機能させるのに問題があります。

.hファイル

class Parent {
    int id;
    public:
        virtual int getid();
} 

class Child : public Parent {
    int id;
    public:
        int getid();
}

.ccファイル

Parent::Parent( int num ) {
    id = num;
}

int Parent::getid() {
    cout << "Parent!"; 
    return id;
}

Child::Child( int num ) : Parent(num) {
    id = num;
}

int Child::getid() {
    cout << "Child!";
    return id;
}

を作成Child kid = Child(0);して呼び出すと、の代わりにkid.getid();取得します。Parent!Child!

私の実装の何が問題になっていますか?

4

2 に答える 2

1

私はあなたの問題を見ていません、最小限の修正で、それは印刷されますChild!

http://ideone.com/zR3wTm

于 2012-11-13T03:40:25.900 に答える
0

コードには多くの構文エラーが含まれています。コンパイルすらできませんでした。ここでは、いくつかのメモで修正されています。このコードは実際には「Child!」を出力します。

#include <iostream>

class Parent {
    protected:
        //Don't redeclare id in child -- have it protected if you want child
        //to have access to it.
        int id;
    public:
        //The constructor must be delcared the same way as other member functions
        Parent(int num);
        virtual int getid();
};

class Child : public Parent {
    public:
        //Once again, the constructor must be declared
        Child(int num);
        int getid();
};

//Initializer lists should be used when possible
Parent::Parent( int num ) : id(num) {
    //id = num;
}

int Parent::getid() {
    std::cout << "Parent!"; 
    return id;
}

//Just call the Parent constructor -- no need to assign inside of the child constructor
Child::Child( int num ) : Parent(num)
{ }

int Child::getid() {
    std::cout << "Child!";
    return id;
}

int main(int argc, char** argv)
{

    Child kid(5);
    std::cout << kid.getid() << std::endl;

    return 0;

}
于 2012-11-13T03:42:04.870 に答える