变量承接函数类型的方法

重点:

1.当两个类没有共同基类。

采用函数模板:类具有相同的函数

cpp 复制代码
class FirstCmd 
{
public:
	FirstCmd()=default;
	~FirstCmd() = default;

	void TestCmd() { std::cout << 10 << std::endl;};
};


class SecondCmd
{
public:
	SecondCmd() = default;
	~SecondCmd() = default;

	void TestCmd() { std::cout << 20 << std::endl; };
};



template<class T>
void Get(T* a)
{
	a->TestCmd();
}

int main()
{
	int a = 3;
	int b = a * a * a-a;
	FirstCmd* first=new FirstCmd();
	SecondCmd* second =new SecondCmd();

	auto iter = dynamic_cast<FirstCmd*>(first);
	auto se = dynamic_cast<SecondCmd*>(second);
	if (iter == nullptr)
	{
		Get(se);
	}
	else
	{
		Get(iter);
	}
	return 0;
}

2.当两个类有共同基类。

采用向下转型方式

cpp 复制代码
class BaseCmd
{
public:
	BaseCmd() = default;
	~BaseCmd() = default;

	virtual void TestCmd() = 0;
};



class FirstCmd:public BaseCmd
{
public:
	FirstCmd()=default;
	~FirstCmd() = default;

	virtual void TestCmd() { std::cout << 10 << std::endl;};
};


class SecondCmd :public BaseCmd
{
public:
	SecondCmd() = default;
	~SecondCmd() = default;

	virtual void TestCmd() { std::cout << 20 << std::endl; };
};

std::shared_ptr<BaseCmd> GetBaseCmd(bool check)
{
	if (check)
	{
		return std::make_shared<FirstCmd>();
	}
	else
	{
		return std::make_shared<SecondCmd>();
	}
}

int main()
{
	bool check{ false };

	auto base =GetBaseCmd(check);
	base->TestCmd();
	std::shared_ptr<BaseCmd> baseCmd = std::dynamic_pointer_cast<FirstCmd>(base);
	if (!baseCmd)
	{
		baseCmd=  std::dynamic_pointer_cast<SecondCmd>(base);
	}
	
	if (baseCmd)
	{
		baseCmd->TestCmd();
	}
	return 0;
}
相关推荐
星轨初途13 小时前
LeetCode 热题 100——day2 字母异位词分组
c++·算法·leetcode
happyprince13 小时前
篇1:整体观 · bitsandbytes项目全貌解读
人工智能·算法
HJX_072413 小时前
嵌入式软件C语言八股文复习笔记5——编译、链接与底层硬核机制
c语言·开发语言·笔记
青梅橘子皮13 小时前
STL---map/set... “家族“详解(从使用到底层)(1)
数据结构·算法
让学习成为一种生活方式14 小时前
DNA 甲基化综述(模式、调控与功能)--Current Opinion in Plant Biology
算法
笨鸟先飞的橘猫14 小时前
c++面向对象编程
开发语言·c++
小玮看世界14 小时前
[Python]自动驾驶感知与决策练习题 (1-10)
开发语言·python·自动驾驶
满栀58514 小时前
原生JS + ECharts 多图表可视化实战:从业务实现到工程化优化
开发语言·javascript·echarts
啦啦啦啦啦zzzz14 小时前
设计模式:桥接模式和组合模式
c++·设计模式·组合模式·桥接模式
-森屿安年-14 小时前
647. 回文子串
c++·算法·动态规划