繼承中派生類指針轉換爲基類指針

#include "stdafx.h"
#include <memory>
using namespace std;

class Base
{
public:
	Base(){}
	~Base(){}

	virtual void Deal()
	{
		int n;
		n = 6;
	}
private:
};

class A : public Base
{
public:
	A(){}
	~A(){}

	virtual void Deal() override
	{
		int i;
		i = 1;
	}

	void xxxx()
	{

	}
private:
};

int _tmain(int argc, _TCHAR* argv[])
{
	shared_ptr<A> a(new A());
	shared_ptr<Base> p = a;
	p->Deal();//ok,繼承覆蓋了基類Deal函數

	p->xxxx();//class "Base" 沒有成員 "xxxx"

	return 0;
}

如何才能調用繼承類(A類)的成員函數xxxx呢?

轉換方法:

      shared_ptr<A>  sp = dynamic_point_cast<A>(p);

此時,即可執行A類中的函數  sp.xxxx(); 了.

智能指針用:dynamic_pointer_cast, 

 一般指針用:dynamic_cast



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章