- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{category プログラミング}}
{{category JAVA}}
{{category Java}}
C++とJavaの違いのメモ
!オーバライドと仮想関数のメモ
C++の場合、スーパークラスのメンバ関数にvirtualをつけると次のように動作する。
つけない場合には、スーパークラスの関数が呼ばれる。
#include <iostream>
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