栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

计算机程序设计c++ 12-1:多态性基本概念

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算机程序设计c++ 12-1:多态性基本概念

多态性含义

多态指相同语法结构,代表多种功能或操作
例如:X+Y

  • X和Y都为整数类型:相加操作先以个位对齐,然后对应位相加
  • X和Y都为浮点类型:相加操作先以小数点对齐,然后对应位相加
  • 当然+两边可以为不同类型也可以相加,比如虚数相加

例如:datatype max(datatype a, datatype b)

  • a和b都为整数,可以直接用关系运算符判断比较得出最大值
  • a和b都为日期对象,判断比较操作较为复杂
  • 能否将max()函数重载,求两个新类的对象的大小

无论 X + Y X+Y X+Y还是datatype max(datatype a,datatype b)

  • 都实现了一种语法格式,隐含了多种操作,这就是多态
  • 多态实现了“一种接口,多种方法”
  • 具体地讲就是将运算符重载,将函数重载,实现不同功能
多态性的两种形式 编译时多态性
  • 编译器对源程序进行编译时就可以确定所调用的是哪一个函数
  • 编译时多态性通过重载来实现
  • 函数重载
  • 运算符重载
运行时多态性
  • 在程序运行过程中根据具体情况来确定调用的是哪一个函数
  • 运行时多态通过虚函数来实现
编译时多态

兔子类

class 兔子
{
	public:
		void 逃生(老鹰 a){"兔子蹬鹰";}
		void 逃生(老狼 b){"动如脱兔";}
};

void main()
{
	兔子 rabbit;
	老鹰 eagle;
	老狼 wolf;
	rabbit.逃生(eagle);
	rabbit.逃生(wolf);
}

逃生函数是重载函数,相同函数名
在调用函数时,传入的参数类型在编译时就确定

最大类

#include

using namespace std;

char max_( char x, char y ) { return x>y ? x : y; }

int max_( int x, int y ) { return x>y ? x : y; }

float max_( float x, float y ) {return x>y ? x : y; }

void main()
{
	float a=3.14, b=2.718;
	cout <<	"d与s:" << max_('d', 's') << "大" << endl;	  // 字符类比较
	cout << "28与168:" << max_(28, 168) << "大" << endl;  // 整数类比较
	cout << "3.14与2.718:" << max_(a, b) << "大" << endl; // 浮点数比较
}

运行时多态
#include

using namespace std;

class pet
{
	public:
		virtual void speak() {cout<<"zzz"<> x; //石头扔的远近,只有扔了才知道效果
	if(x==1) p = &cat1; //例如用户输入1 ,则执行猫对象地址赋给p
	if(x==2) p = &dog1; //例如用户输入2,则执行猫对象地址赋给p
	p->speak(); //究竟运行哪个函数,只有运行时才知道
}


注意: 0的时候 就输入基类中的成员函数
其中基类中pet中有一个关键字virtual,表明是虚函数
有virtual修饰的函数,在基类指针指向派生类对象或者基类引用以派生类对象赋值时调用派生类的函数,无virtual修饰时只会调用基类的函数
一个类中将所有的成员函数都尽可能地设置为虚函数总是有益的。下面是设置虚函数的注意事项:
1.只有类的成员函数才能声明为虚函数
2.静态成员函数不能使虚函数,因为它不受限于某个对象
3.内联函数不能使虚函数
4.构造函数不能是虚函数

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号