{{category プログラミング}} {{category Java}} C++とJavaの違いのメモ !オーバライドと仮想関数のメモ C++の場合、スーパークラスのメンバ関数にvirtualをつけると次のように動作する。 つけない場合には、スーパークラスの関数が呼ばれる。 #include using namespace std; class VirtualTest { public: virtual void test(){ cout << "virtual test" << endl; } }; class Test { public: void test(){ cout << "test" << endl; } }; class VirtualTest1 :public VirtualTest { public: void test(){ cout << "virtual test 1" << endl; } }; class Test1: public Test { public: void test(){ cout << "test 1" << endl; } }; int main(){ VirtualTest *v; Test *t; v = new VirtualTest1; t = new Test1; v->test(); t->test(); } 結果 virtual test 1 test Javaの場合virtualはなくて、生成したクラスの方のメソッドが呼ばれる。 デフォルトでvirtualがついてるってことかな。 class VirtualTest{ public void test(){ System.out.println("virutal test"); } } class VirtualTest1 extends VirtualTest{ public void test(){ System.out.println("virutal test 1"); } } public class Test{ public static void main(String args[]){ VirtualTest v = new VirtualTest1(); v.test(); ((VirtualTest1)v).test(); } } 結果 virutal test 1 virutal test 1