クラス内の関数を継承する際、派生先によってpublicなものとprivateなものを分けたいのですがやり方がわかりません。
class Base
{
public:
virtual void func(){Base::funcの処理}
};
class Driver1 : public Base
{
public:
void func(){Base::func()}
};
class Driver2 : public Base
{
private:
void func(){Base::func()}
};
わかりにくいかもしれませんがDriver1ではfunc()をpublicに扱いたい。
Driver2ではprivateに扱いたいのです。
どちらもBase::func()の使用方法は変わらないので、派生先での関数を再定義をあまりしたくありません。
継承する際のclass Driver2 : public Baseをprivate Baseなど継承方法を変えない方法で関数を再定義する方法はあるのでしょうか?
よろしくお願いします。
どちらでも Base::func を呼ぶだけであれば、オーバーライドする必要があるのですか?
仮に可能であったとして、
Driver2 d2;
Base * base = &d2;
base->func();
として呼び出すことは可能ですが、問題ないですか?
実際やりたいことはDriver1は外部からfunc()を呼び出し
Driver2は別の関数Driver2::func2()とも呼ぶべきものから呼び出したいということなんです。
↓こゆこと?
#include <iostream>
class Base {
public:
virtual void func() { std::cout << "Base::func()\n"; }
};
class Derived1 : private Base {
public:
using Base::func;
};
class Derived2 : private Base {
private:
void func2() { std::cout << "Derived2::func2()\n"; }
public:
virtual void func() { func2(); }
};
int main() {
Derived1 d1; d1.func();
Derived2 d2; d2.func();
}
Baseのfunc()が外部から呼ぶ必要がないのなら
protectedにでもしておけば、派生先でコントロールできるのでは?
>通りすがりさん
すみません・・・そういうことですね
class Driver1 : public Base
{
public:
func2(){Base::func()}
}
class Driver2 : public Base
{
public:
func2()
{
色々な処理
Base::func()
}
}
ということでした。
お騒がせしました
ツイート | ![]() |