计算机程序设计c++ 12

阅读: 评论:0

计算机程序设计c++ 12

计算机程序设计c++ 12

多态性含义

多态指相同语法结构,代表多种功能或操作
例如: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<iostream>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<iostream>using namespace std;class pet
{public:virtual void speak() {cout<<"zzz"<<endl;};
};class cat : public pet
{public:void speak() { cout<< "miao!miao!"<<endl; }
};class dog : public pet
{public:void speak() { cout<< "wang!wang!"<<endl; }
};void main()
{pet pet1, *p=&pet1; //p为宠物类指针cat cat1; //定义猫类对象dog dog1; //定义狗类对象int x; //根据用户输入将猫或狗对象地址赋给p指针,cin >> x; //石头扔的远近,只有扔了才知道效果if(x==1) p = &cat1; //例如用户输入1 ,则执行猫对象地址赋给pif(x==2) p = &dog1; //例如用户输入2,则执行猫对象地址赋给pp->speak(); //究竟运行哪个函数,只有运行时才知道
}


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

本文发布于:2024-01-28 21:05:22,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170644712810275.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:day11
下一篇:阶段二12
标签:程序设计   计算机
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23