我的问题是,如果我有这样的东西
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使用在Base中使用的func()的实现,但我希望Derived3使用func()的方式略有不同。问题是,如果我在Base中将func()设为虚函数,那么Derived1和Derived2都需要以不同的方式实现它,这是我不想要的。但是,如果我不把它设为虚拟的,那么所有的派生类都将有相同的func()植入。我怎样才能克服这个问题呢?
发布于 2016-03-31 04:56:21
虚函数不必被重写。Derived1和Derived2不能重新声明func()。
只有纯虚函数(用= 0声明)才能被(非抽象的)派生类覆盖。
发布于 2016-03-31 04:55:14
编辑
这是可行的,但是除非你需要在函数中做更多的工作,否则@Cameron的答案是正确的。
您可以从派生函数中调用基函数,如下所示:
class Base
{
public:
virtual void foo() { /* Do something */ };
};
class Derived1 : public Base
{
public:
virtual void foo() { /* Do something else */ };
};
class Derived2 : public Base
{
public:
virtual void foo() { Base::foo(); /* Do something */ };
};发布于 2016-03-31 05:18:35
你有没有想过只在derived1中定义为虚拟函数?
下面的代码是这样工作的(这是您想要的吗?)
#include <stdio.h>
#define X
class Base {
public:
void func();
};
void Base::func() {
printf("Base\n");
}
class Derived1 : public Base {
public:
virtual void func();
};
void Derived1::func() {
printf("derived1\n");
};
class Derived2 : public Base {
public:
};
class Derived3 : public Base {
public:
};
int main(int argc, char **argv)
{
Base b;
Derived1 d1;
Derived2 d2;
Derived3 d3;
b.func();
d1.func();
d2.func();
d3.func();
printf("hello world\n");
return 0;
}https://stackoverflow.com/questions/36319479
复制相似问题