变量承接函数类型的方法

重点:

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;
}
相关推荐
Suxing92 分钟前
C语言基础分享:C语言文件操作:从“写日记”到“拍电影”的存盘指南
c语言·开发语言
Navigator_Z3 分钟前
LeetCode //C - 1237. Find Positive Integer Solution for a Given Equation
c语言·算法·leetcode
右耳朵猫AI6 分钟前
Node.js周刊2026W36 | NestJS 12发布、Remix 3 RC、pnpm 12 Rust重写、Node.js 26.8.0
开发语言·rust·node.js
啦啦啦啦啦zzzz17 分钟前
Appender抽象类的实现c++20
linux·服务器·c++·c++20
统计学小王子23 分钟前
数学建模国赛倒计时 2 天 ——《异常值的处理(R语言)》
开发语言·数学建模·r语言
z落落3 小时前
C# WinForm Socket 转串口设备服务器+Modbus CRC16校验+Socket 客户端
服务器·开发语言·c#
小灰灰搞电子9 小时前
Rust+Slint 实现动态消息提示框源码分享
开发语言·后端·rust
神仙别闹10 小时前
基于 C++ 实现两个有序链表序列的交集
java·c++·链表
传奇开心果编程10 小时前
【Rust入门知识点学与练】第21课:Trait 进阶 Advanced Traits
开发语言·学习·rust
新时代牛马11 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python