变量承接函数类型的方法

重点:

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;
}
相关推荐
cloues break.3 分钟前
C++进阶----多态
开发语言·c++
我不会编程55510 分钟前
Python Cookbook-6.10 保留对被绑定方法的引用且支持垃圾回收
开发语言·python
এ᭄画画的北北20 分钟前
力扣-234.回文链表
算法·leetcode·链表
道剑剑非道24 分钟前
QT开发技术【qcustomplot 曲线与鼠标十字功能】
开发语言·qt·计算机外设
刘婉晴38 分钟前
【环境配置】Mac电脑安装运行R语言教程 2025年
开发语言·macos·r语言
Despacito0o38 分钟前
C++核心编程:类与对象全面解析
开发语言·c++
Tiger Z39 分钟前
R 语言科研绘图第 43 期 --- 桑基图-冲击
开发语言·r语言·贴图
八股文领域大手子1 小时前
深入理解缓存淘汰策略:LRU 与 LFU 算法详解及 Java 实现
java·数据库·算法·缓存·mybatis·哈希算法
全栈师1 小时前
C#中分组循环的做法
开发语言·c#
FAREWELL000751 小时前
C#进阶学习(十六)C#中的迭代器
开发语言·学习·c#·迭代器模式·迭代器