从Java的角度来看,我惊讶地发现只能覆盖具有virtual关键字的基本方法。 在Java中,您使用final关键字来声明方法不能被覆盖。C++中的重写规则
我曾在我的脑海的想法,你很少想禁止压倒一切,从而使他人可以扩展你的类他们如何认为合适的。
在C++所以,如果你觉得有人会从你的类中的一些阶段继承想(也许几年后有人认为它是一个很酷的想法),你让所有的方法虚拟?
还是有希望为C++中,我不知道禁止一些这方面的关键原因是什么?
借鉴这是试验我每种语言做的:
的Java
public class Base {
void doSomething(){
System.out.println("Doing the base thing");
}
}
public class Derived extends Base {
void doSomething(){
System.out.println("Doing the derived thing");
}
public static void main(String... argv){
Base object = new Derived();
object.doSomething();
}
}
C++
class Base
{
public:
Base(void);
~Base(void);
virtual void doSomething();
};
void Base::doSomething(){
std::cout << "I'm doing the base thing\n" << std::endl;
}
class Derived :
public Base
{
public:
Derived(void);
~Derived(void);
void doSomething();
};
void Derived::doSomething(){
std::cout << "I'm doing the dervied thing" << std::endl;
}
int main(void){
Base * object = new Derived;
object->doSomething();
return 0;
}
的可能重复的[当在C++标记的功能作为虚拟?](http://stackoverflow.com/questions/8298041/when-to-mark-a-function-in-c-as-a-虚拟) – 2012-01-03 10:35:59