C++継承におけるメソッドの使用

1435 ワード

一、全体コード
      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キーワードは省けません.