Мой вопрос, если у меня есть что-то вродеC++ - Условные виртуальные функции
class Base {
...
public:
virtual void func();
}
void Base::func() {
//Implementation # 1
}
class Derived1 : public Base {
...
public:
void func();
}
void Derived1::func() {
//Implementation # 1
}
class Derived2 : public Base {
...
public:
void func();
}
void Derived2::func()
//Implementation # 1
}
class Derived3 : public Base {
...
public:
void func();
}
void Derived3::func() {
//Implementation # 2
}
То, что я пытаюсь сделать, это я хочу Derived1 и Derived2 использовать реализацию FUNC(), который был использован в Базе , но я хочу, чтобы Derived3 использовал func() несколько иначе. Проблема в том, что если я делаю func() виртуальным в Base, то и Derived1, и Derived2 нужно будет реализовать его по-другому, чего я не хочу. Однако, если я не сделаю его виртуальным, то все производные классы будут иметь такую же имплантацию для func(). Как я могу преодолеть эту проблему?
Я не знал, что я мог сделать это. Поэтому было бы правильно сказать, что с общим наследованием Derived1,2,3 будет иметь доступ к func(), реализованному в Base, если они не объявят его в своих собственных классах, и в этом случае используется новое объявление. –
Это верно, за исключением того, что у них все равно будет доступ даже с частным наследованием (хотя метод не будет виден вне производных классов), и даже если переопределить в производном классе, базовый метод все равно может быть явно вызван при желании , – Cameron
Может ли это быть чем-то вроде следующего кода, где вы определяете виртуальную функцию только в Derived1? –