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- virtual) –