子クラス関数にアクセスする方法

c++
子クラス関数にアクセスする方法
class base{}

class child : public base{

**dummyfunction();**

}

現在、子クラスオブジェクトを渡す関数を呼び出しています。

**child ob;**

function(**ob**);//calling a function

//function body

function(**base *object**)
{

**//here I want to access the function of child class. How can I do it???**

 **for example dummyfunction()**

}

  2  0


ベストアンサー

関数を基本クラスに入れて仮想化するか、「dynamic_cast」を使用してタイプセーフなダウンキャストを行う必要があります。 関数をインターフェイスの一部にし、基本クラスと子クラスの両方で使用できるようにする方がおそらく良いでしょうが、それ以上の情報がなければ言いにくいです。 ただし、一般的に言えば、RTTIと `dynamic_cast`の使用は、設計が不十分であることを示しています。

4


なぜあなたはこれをしたいのですか? クラス base`のオブジェクトを取得している場合、クラス child`の関数を呼び出すことはできません。

3


あなたの望みは、使用しているデータ構造の目的に反しています。

あなたはそれをすることができます

child *child_object = dynamic_cast(object);
child_object -> dummyfunction();

しかし、すべきではありません。 代わりにシステムを適切に設計してください。

1


動的キャストの使用に加えて、static_castを参照とともに使用できます。

base &b = base();
static_cast(b).dummyFunction();

1


必要なのはダウンキャストです。

dummyFunctionを基本クラスで仮想として作成し、子クラスでこの関数をオーバーライドすることで、このソリューションはダウンキャストを必要としません。

それ以外の場合は、以下の投稿で説明されている方法を使用できますが、これはダウンキャストするのは安全ではありません

0


呼び出したい関数が

void f();

_Base_クラスで_virtual_にし、_Derived_クラスで* override *にしてから、Baseクラスのメンバー関数(_except_コンストラクター!)から呼び出します。

0


タイトルとURLをコピーしました