C++継承におけるメソッドの使用
1435 ワード
一、全体コード
01.cpp
二、運行結果
Base ... Derived ... Derived Base ~Derived ... ~Base ...
三、
サブクラスオブジェクトを直接生成し、サブクラスのpublicメソッドと親public非virtualメソッドを呼び出すことができます.
親オブジェクトを直接生成し、親publicメソッドのみを呼び出す
サブクラスオブジェクトを親オブジェクトに変換し、親public非virtualのメソッドとサブクラスがvirtualを上書きするメソッドを呼び出すことができます.
サブクラスが親を上書きするvirtualメソッドの場合、virtualを追加しても追加しなくても構いません.また、親を上書きするvirtualメソッドを示す識別の役割を果たします.
サブクラスにサブクラスがある場合、このvirtualキーワードは省けません.
01.cpp
#include <iostream>
using namespace std;
class Base {
public:
virtual void display() { // ,virtual ,
cout << "Base" << endl;
}
Base() {
cout << "Base ..." << endl;
}
virtual ~Base() { // , virtual, ,
cout << "~Base ..." << endl;
}
protected:
void run(){
cout << "run" << endl;
}
};
class Derived: public Base {
public:
virtual void display() { //
cout << "Derived" << endl;
Base::display(); // , , ,
}
void test() { //
run();// public protected
}
Derived()
{
cout<<"Derived ..."<<endl;
}
~Derived()
{
cout<<"~Derived ..."<<endl;
}
};
int main(void) {
Base* d = new Derived;
d->display();
delete d;
return 0;
}
二、運行結果
Base ... Derived ... Derived Base ~Derived ... ~Base ...
三、
サブクラスオブジェクトを直接生成し、サブクラスのpublicメソッドと親public非virtualメソッドを呼び出すことができます.
親オブジェクトを直接生成し、親publicメソッドのみを呼び出す
サブクラスオブジェクトを親オブジェクトに変換し、親public非virtualのメソッドとサブクラスがvirtualを上書きするメソッドを呼び出すことができます.
サブクラスが親を上書きするvirtualメソッドの場合、virtualを追加しても追加しなくても構いません.また、親を上書きするvirtualメソッドを示す識別の役割を果たします.
サブクラスにサブクラスがある場合、このvirtualキーワードは省けません.