变量承接函数类型的方法

重点:

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;
}
相关推荐
FreeBuf_1 分钟前
Happy DOM曝CVSS 9.4严重RCE漏洞,PoC已公开(CVE-2025-61927)
java·c语言·c++·python·php
刘海东刘海东2 分钟前
结构型智能科技理论研究(草稿)
科技·算法
BlackQid4 分钟前
深入理解指针Part4——字符、数组与函数指针变量
c++·后端
C嘎嘎嵌入式开发12 分钟前
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
数据结构·python·算法
熬了夜的程序员14 分钟前
【LeetCode】69. x 的平方根
开发语言·算法·leetcode·职场和发展·动态规划
Niuguangshuo22 分钟前
音频特征提取算法介绍
算法·音视频
Vect__28 分钟前
从底层到上层的“外挂”:deque、stack、queue、priority_queue 全面拆解
数据结构·c++
草莓熊Lotso30 分钟前
C++ 手写 List 容器实战:从双向链表原理到完整功能落地,附源码与测试验证
开发语言·c++·链表·list
无限进步_32 分钟前
【C语言】杨辉三角:数学之美与编程实现的完美结合
c语言·开发语言
Cg1362691597433 分钟前
封装的实现和定义
java·开发语言