2016-05-01 9 views
0

私は親クラスがあります。禁じる継承

class Animal 
    { 
    public : 
     virtual void SetColor (const string & col) 
     { 
     colour = col; 
     } 

     virtual void Greeting (const string & name) 
     { 
     cout << "Hi I'm Animal" << endl; 
     } 
    protected: 
    string colour; 
    }; 

それから私は、クラスの動物から継承したクラスの犬を持っています。例えば

​​

私は間違っていない場合は、この場合には、Dogクラスは、2つの方法SetColorGreetingともstring colourを継承するように、犬の子クラスは親クラスの動物からすべてを継承します。

親クラスのメソッド「Greeting」を継承することはできますか?

+2

号のいずれかが、基本クラスの上に置くか、何もしないように派生クラスでそれを上書きしません。 – CoryKramer

+6

XY問題のように聞こえます。最終目的は何ですか? 'private'を使ってメソッドの可視性を減らすのに十分ではありませんか? – skypjack

答えて

1

あなたはGreeting、独自に提供するために、Dogを強制することができます。

#include <iostream> 
#include <string> 

class Animal { 
public: 
    virtual void SetColor(const std::string & col) 
    { 
     colour = col; 
    } 

    virtual void Greeting(const std::string & name) = 0; 

protected: 
    std::string colour; 
}; 

class Dog : public Animal { 

    virtual void Greeting(const std::string & name) override 
    { 
     std::cout << "Hi I'm a dog. My name is " << name << ". I was forced to provide this function.\n"; 

    } 
}; 

int main(void) 
{ 
    Animal *ptr = new Dog(); 
    ptr->Greeting("Fluffy"); 
    delete ptr; 
    return 0; 
}