C++virtualの使い方

1922 ワード

virtualキーワードの役割:1.派生クラスは書き換えによってベースクラスの仮想関数を上書きすることができ、ベースクラスのポインタが派生クラスのオブジェクトを指す場合、呼び出し関数が呼び出すのは派生クラスで書き換えた仮想関数であり、これによりオブジェクト向けの多態性が実現する.純虚関数virtual void play()=0;インタフェースの役割を果たす.その派生クラスは純虚関数を書き直さなければならない.そうしないと、エラーが発生する.仮想継承は、異なるパスから継承された同名のデータ・メンバーがメモリに異なるコピーを持ってデータが一致しない問題を解決するために、共通ベース・クラスを仮想ベース・クラスに設定します.この場合、異なるパスから継承された同名のデータメンバーはメモリにコピーが1つしかなく、同じ関数名にもマッピングが1つしかありません.これにより、二義的な問題だけでなく、メモリも節約でき、データの不一致を回避できます.class派生クラス名:virtual継承方式ベースクラス名
virtualはキーワードで、派生クラスである虚ベースクラスを宣言します.
#include "stdafx.h"
#include
using namespace std;
/* virtual      :1.                   ,
               ,                    ,
              
2.     virtual void play() = 0;       。            ,
     
3.                                            ,
           。                              ,
             。             ,      ,           。
class     :virtual          
virtual    ,             。
*/
class A{
public:
	/*virtual A(){
	}*/
	virtual void sayHello(){ 
		cout << "hello world.this is A"<sayHello();
	system("pause");
	return 0;
}
#include "stdafx.h"
#include"iostream"
using namespace std;
class Ifootball{
	virtual void play() = 0;
	virtual void myName() = 0;
};

class football :Ifootball{
public:
	static string name;
	void play(){
		cout << "play";
	}
	void myName(){
		cout << "my name is football";
	}
	static void sayHello(){
		cout << "hello";
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	football::name = "football";//  ::    
	football::sayHello();
	football ff;
	ff.sayHello();
	ff.name = "football";
	ff.myName();
	ff.play();
	char a;
	cin >> a;
	return 0;
}