2017-05-14 13 views
0

ほとんど完全に同じクラスと派生クラスを作成しました。 唯一の違いは、派生クラスには2つの異なる関数と3つの余分な変数があることです。私は、継承された機能を使用するには、クラスBから呼び出される関数をしたいが呼ばれる代わりに、クラスBのPrivFunctionsで、機能は私がおよそを考えた派生クラスのメンバ関数を使用する基本クラスから関数を呼び出します。

class A 
{ 
protected: 
double x,y,z; 
Function() { 
*do something using the member variables of class A and the member functions of class A* } 

private: 
double PrivFunction() { 
*take in member variables from A and return a certain value* } 

double PrivFunction2() { 
*take in member variables from A and return a certain value* } 

class B : public A 
{ 
private: 
double a,b,c; 

double PrivFunction() { 
*take in member variables from A,B and return a certain value* } 

double PrivFunction2() { 
*take in member variables from A,B and return a certain value* } 

main() { 
B classb(); 
B.Function() 
} 

自分のクラス、クラスAのPrivFunctionsを使用していますFunction()内のプライベート関数のアドレスを追加するが、あまりにも遠くにフェッチされているようだ。私は単純なものを見逃しているように感じますが、これをきちんとする方法を見つけることができません。

+0

を、私はあなたが探していると思う[ 'virtual'メンバ関数](http://en.cppreference.com/w/cpp/language/virtual) 。 –

答えて

0

基本クラスの関数はvirtualと宣言してください。これは基本クラスAで定義した関数の一種で、サブクラスで再定義する必要があります。 virtualのような関数を宣言すると、正しい関数が呼び出され、あいまいさを避けることができます。

あなたのコードは次のようになります。

class A 
{ 
    protected: 
    double x, y, z; 
    //define as virtual 
    virtual Function(){/*do something*/} 

    /* 
    rest of your code 
    */ 
} 
class B: public A 
{ 
    private: 
    double a, b, c 

    public: 
    //redefine your function in the subclass 
    Function(){/*do something else*/} 
    /* 
    rest of your code 
    */ 
} 
int main() 
{ 
    B classb(); 
    //This will now use B's Function 
    classb.Function(); 
} 
関連する問題