首页 > 编程语言 >《C++》多态

《C++》多态

时间:2023-06-18 23:33:04浏览次数:46  
标签:num1 num2 int 多态 getResult C++ public

多态

多态分为两种:

  • 静态多态:函数重载运算符重载 属于静态多态,复用函数名
  • 动态多态:派生类虚函数 实现运行时多态
  • 静态多态函数地址早绑定--编译阶段确定函数地址
  • 动态多态函数地址晚绑定--运行阶段确定函数地址

virtual   //修饰虚函数,使之变为动态

多态特点

  • 代码结构清晰
  • 可读性强
  • 利于前期和后期的扩展及维护

练习--计算器的封装、继承、多态

class Compute
{
public:
	virtual int getResult()
	{
		return 0;
	}

	void assagin(int num1, int num2)
	{
		this->m_num1 = num1;
		this->m_num2 = num2;
	}
	int m_num1;
	int m_num2;
};
class AddCompute : public Compute
{
public :
	int getResult()
	{
		return m_num1 + m_num2;
	}
};
class SubCompute : public Compute
{
public:
	int getResult()
	{
		return m_num1 - m_num2;
	}
};
class MulCompute : public Compute
{
public:
	int getResult()
	{
		return m_num1 * m_num2;
	}
};
class DivCompute : public Compute
{
public:
	int getResult()
	{
		return m_num1 / m_num2;
	}
};
void test()
{
	Compute *p1 = new AddCompute;
	p1->assagin(20, 30);
	cout << p1->m_num1 << " + " << p1->m_num2 << " = " << p1->getResult() << endl;

	Compute *p2 = new SubCompute;
	p2->assagin(20, 30);
	cout << p2->m_num1 << " - " << p2->m_num2 << " = " << p2->getResult() << endl;

	Compute *p3 = new MulCompute;
	p3->assagin(20, 30);
	cout << p3->m_num1 << " * " << p3->m_num2 << " = " << p3->getResult() << endl;

	Compute *p4 = new DivCompute;
	p4->assagin(100,10);
	cout << p4->m_num1 << " / " << p4->m_num2 << " = " << p4->getResult() << endl;

	delete p1; p1 = nullptr;
	delete p2; p2 = nullptr;
	delete p3; p3 = nullptr;
	delete p4; p4 = nullptr;
}
int main()
{
	test();
	system("pause");
	return 0;
}


标签:num1,num2,int,多态,getResult,C++,public
From: https://blog.51cto.com/u_16071993/6510030

相关文章

  • C++常用数据结构
    数据结构1.线性表由n个具有相同性质的数据元素1.1顺序表(数组)定义:用一组地址连续的存储单元依次存储线性表中每个数据元素特点:逻辑关系相邻的两个元素在物理位置上也相邻#c++实现template<typenameT>classsqlist{public:sqlist(intmaxsize=10):Maxsize(......
  • 现代C++学习指南-类型系统
    在前一篇,我们提供了一个方向性的指南,但是学什么,怎么学却没有详细展开。本篇将在前文的基础上,着重介绍下怎样学习C++的类型系统。写在前面在进入类型系统之前,我们应该先达成一项共识——尽可能使用C++的现代语法。众所周知,出于兼容性的考虑,C++中很多语法都是合法的。但是随着新......
  • #yyds干货盘点#C++命名空间
    命名空间命名空间是C++语言的新特性,它能够解决命名冲突问题。例如,小明定义了一个函数swap(),C++标准程序库中也存在一个swap()函数。此时,为了区分调用的是哪个swap()函数,可以通过命名空间进行标识。C++中的命名空间包括两种,具体介绍如下。usingnamespacestd;1.标准命名空间std是C+......
  • C++17特性
    构造函数模板推导在C++17前构造一个模板类对象需要指明类型:pair<int,double>p(1,2.2);//beforec++17C++17就不需要特殊指定,直接可以推导出类型,代码如下:pairp(1,2.2);//c++17自动推导vectorv={1,2,3};//c++17结构化绑定1.获取值//绑定tuplestd::tupl......
  • C++练习题
    多态判断Q1:虚函数可以是内联的?A1:错误。内联是编译时刻决定的,虚函数是运行时刻动态决定的,所以虚函数不能是内联函数。虚函数前加上inline不会报错,但是会被忽略。Q2:一个类内部,可以同时声明staticvoidfun()和virutalvoidfun()两个函数?A2:错误。虽然静态函数......
  • C++面试八股文:什么是RAII?
    C++面试八股文:什么是RAII?某日二师兄参加XXX科技公司的C++工程师开发岗位第13面:面试官:什么是RAII?二师兄:RAII是ResourceAcquisitionIsInitialization的缩写。翻译成中文是资源获取即初始化。面试官:RAII有什么特点和优势?二师兄:主要的特点是,在对象初始化时获取资源,在对......
  • C++基础知识总结
    2023/6/18本篇章记录学习过程C++的基础概念和代码测试实现,还有很多需要补充。一是还不清楚,二是还没有学到。打算学习过程中后面再做补充。先看完《C++primer》书之后再慢慢来添加补充1.函数重载一个函数名可以实现多个功能,这取决于函数参数不同来实现判断对应的功能,与返回......
  • java--多态
       ......
  • C++面试八股文:std::string是如何实现的?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第18面:面试官:std::string用过吧?二师兄:当然用过(废话,C++程序员就没有没用过std::string的)。面试官:std::string("hello")+"world"、"hello"+std::string("world")和std::string("hello")+std::string("world")的......
  • C++面试八股文:std::string是如何实现的?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第18面:面试官:std::string用过吧?二师兄:当然用过(废话,C++程序员就没有没用过std::string的)。面试官:std::string("hello")+"world"、"hello"+std::string("world")和std::string("hello")+std::string("world")的......