2017-01-23 9 views
1

おそらく非常に単純な質問ですが、私はこれを理解する時間の悪魔を持っています。私は、基本クラスを持っている:C++派生クラスアクセスする基底クラスメンバ

User::User() 
{ 
    name = ""; 
} 

void User::GetUser() 
{ 
    cout << name; 
} 

void User::SetUser() 
{ 
    cin >> name; 
} 

User::~User() 
{ 
    name = ""; 
} 

void UserInfo::GetUser() 
{ 
    cout << " "; 
    User::GetUser(); 
    cout << ", you entered: "; 
} 

すべてが正常に動作するようですが、私はのUserInfo :: GETUSERを呼び出すとき:

class UserInfo: public User 
{ 
    public: 
    void GetUser(); 
}; 

および方法:

class User 
{ 
    public: 
     User(); 
     ~User(); 
     void GetUser(); 
     void SetUser(); 
    protected: 
     std::string name; 
}; 

はここに私の派生クラスです()を呼び出すと、Userクラスのnameメンバに格納されている値は実行も取得もされません。その価値をどうやって得るのですか?ありがとう。

+1

表示されているコードには明らかに間違ったことは何もありません(もちろん、記載された質問に直接関係するものはありません)。したがって、問題は表示されていないコードに含まれている必要があります。 –

+1

GetUser()を呼び出すコードを表示します。おそらく 'User'クラスの' GetUser(); 'の代わりに' virtual void GetUser(); 'を使いたいかもしれません。 – drescherjm

+2

[私のための作品](http://rextester.com/PUMIM54797) –

答えて

3

あなたの機能名とその機能を改善することができます。メンバー変数の取得と設定を、cinまたはcoutと混在させないでください。私は次のように機能を変更することをお勧めします。

class User 
{ 
    public: 
     User(); 
     ~User(); 

     // Make the Get function a const member function. 
     // Return the name. 
     std::string const& GetName() const; 

     // Take the new name as input. 
     // Set the name to the new name. 
     void SetName(std::string const& newName); 

    protected: 
     std::string name; 
}; 

としてそれらを実装:

その後
std::string const& User::GetName() const 
{ 
    return name; 
} 

void User::SetName(std::string const& newName) 
{ 
    name = newName; 
} 

、あなたはUserInfoGetUserメンバ関数を必要としません。あなたがUser、使用の名前を設定する準備ができている

User u; 
std::string name; 
std::cin >> name; 
u.SetName(name); 

これは、あなたがからその名前を取得する場所からUserの名前の設定を分離することができます。あなたが名前にUserを印刷する準備ができている

、使用:

std::cout << u.GetName(); 

これは、あなたがそれを取得した後、あなたが名前を使用する方法からUserの名前の取得を分離することができます。

関連する問題