從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