2017-01-23 15 views
2

抽象クラスAを持っており、部分実装で仮想メソッドを持ち、クラスBに継承されています。メソッド、派生クラスの基本実装を取得する必要があります。例えば、 。ただそれは、デフォルト(ベース)の実装をオーバーライドし、新しいものに置き換えられない仮想メソッドをオーバーライド基本クラスの仮想メソッドを実装する方法と、オーバーライドメソッドの基本メソッド実装をCで取得する#

class B : A 
{ 
    public override void add(int a, int b) 
    { 
     // do operation related to derived class 
     // call your base function 
     base.add(a, b); 
    } 
} 
+1

@Derlin私は重複したリンク(このトピックは見えるかもしれませんどのように基本的な)のためのC++のスレッドを使用することが公正であるとは思いません。 –

+0

おっと、申し訳ありませんが、私は誤解しました。私はそれがC++ではなく、C#であると思いました。 – Derlin

+0

私はまだこの質問がCの文脈でも以前に尋ねられていると確信しています# – Sentry

答えて

6

public abstract class A 
{ 
    public int Sum { set; get; } 
    public virtual void add(int a, int b) 
    { 
     Sum = a + b; 
    } 
} 
class B : A 
{ 
    public override void add(int a, int b) 
    { 
     // what should i write here 
    } 
} 
+0

これは正しい答えです! – MrVoid

3

は、単にあなたの基底クラスの関数を呼び出します。ただし、仮想メソッドに対してオーバーライドされた実装を提供しないと、自動的に基本実装が取得されます。だから、あなたの質問への答えは、最初の場所にaddメソッドをオーバーライドしていないだけでです:あなたは基本実装を維持する必要がありますが、それを拡張したい場合は、

class B : A {} 

ただし、明示的に呼び出すことができます基本クラスは派生クラスから実装され、キーワードはbaseです。たとえば:

class B : A 
{ 
    public override void add(int a, int b) 
    { 
     base.add(a, b); 
     DoSomethingElse(); 
    } 
} 
3
public abstract class A 
{ 
    public int Sum { set; get; } 
    public virtual void add(int a, int b) 
    { 
     Sum = a + b; 
    } 
} 

class B : A 
{ 
    public override void add(int a, int b) 
    { 
     //do your sufff 

     //call base method of class A 
     base.add(a, b); 
    } 
} 
関連する問題