C++中的多态
多态性是面向对象程序设计的重要特征之一。多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。
多态的实现方式包括以下3种:函数重载、运算符重载、虚函数。
1、运算符重载:
#include<iostream>
using namespace std; class Complex
{
private:
int real,imag;
public:
void show() const;
Complex operator +(const Complex c);
Complex operator -(const Complex c);
/*
Complex(int a=0,int b=0)
{
real=a;imag=b;
}
*/
Complex(int a=,int b=):real(a),imag(b)
{}
};//don't forget this! void Complex::show() const
{
cout<<"real:"<<real<<"imag:"<<imag<<endl;
} Complex Complex::operator +(const Complex c)
{
Complex ret;
ret.real=real+c.real;
ret.imag=imag+c.imag;
return ret;
} Complex Complex::operator -(const Complex c)
{
Complex ret;
ret.real=real-c.real;
ret.imag=imag-c.imag;
return ret;
} int main()
{
Complex a(,),b(-,),c,d;
a.show();
b.show();
c=a+b;
d=a-b;
c.show();
d.show();
return ;
}
注意运算符重载操作数个数:重载为类的成员函数时,参数个数=原操作数个数-1(后置++、--除外);重载为非成员函数时,参数个数=原操作数个数,且至少有一个自定义类型。
#include<iostream>
using namespace std; class Clock
{
private:
int hour,minute,second;
public:
Clock(int a=,int b=,int c=):hour(a),minute(b),second(c)
{
//hour=a;minute=b;second=c;
}
void show() const;
Clock operator ++();
Clock operator ++(int);
}; void Clock::show() const
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
} //before
Clock Clock::operator ++()
{
if(second+>=)
{
second=second-;
if(minute+>=)
{
minute=;
if(hour+>=)
hour=;
else hour=hour+;
}
else minute=minute+;
}
else second=second+;
return *this;
} //behind still one argument
Clock Clock::operator ++(int)
{
Clock ret=*this;
++(*this);
return ret;
} int main()
{
Clock clock(,,);
cout<<"The time is:";
clock.show(); cout<<"(Time++) is:";
(clock++).show(); cout<<"(++Time) is:";
(++clock).show();
return ;
}
前置++重载,0个操作数;后置++重载,1个操作数,函数中不需要使用该操作数。
2、虚函数:
注意事项:若需要使用多态,则继承方式必须是public或者protected继承,且需要使用到的虚函数在基类中必须是public类型。
#include<iostream>
using namespace std; class Base1
{
public:
virtual void show()
{
cout<<"I am base1!"<<endl;
}
}; class Base2
{
public:
void show()
{
cout<<"I am base2!"<<endl;
}
}; class Derived1:public Base1
{
void show()
{
cout<<"I am Derived1!"<<endl;
}
}; class Derived2:public Base2
{
void show()
{
cout<<"I am Derived2!"<<endl;
}
}; class Derived3:public Base1,public Base2
{
void show()
{
cout<<"I am Derived3!"<<endl;
}
}; int main()
{
Base1 *p1;
Base2 *p2;
Derived1 d1;
Derived2 d2;
Derived3 d3; p1=&d1;
p1->show(); p2=&d2;
p2->show(); p1=&d3;
p1->show();
p2=&d3;
p2->show(); return ;
}
纯虚函数:virtual void func()=0;
抽象类:包含了纯虚函数的类。
C++中的多态的更多相关文章
- 13、java中的多态
1,多态的体现 父类的引用指向了自己的子类对象. 父类的引用也可以接收自己的子类对象.2,多态的前提 必须是类与类之间有关系.要么继承,要么实现. 通常还有一个前提:存在覆盖. 3,多态的好处 多态的 ...
- java中实现多态的机制是什么?
多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次 ...
- C#中区别多态、重载、重写的概念和语法结构
C#中区别多态.重载.重写的概念和语法结构 重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual ...
- 转载:C#中的多态
原文地址 http://www.cnblogs.com/jhxk/articles/1644018.html 感谢博主分享! 之前看到过类似的问题:如果面试时主考官要求你用一句话来描述多态,尽可能的 ...
- c++中虚多态的实现机制
c++中虚多态的实现机制 參考博客:http://blog.csdn.net/neiloid/article/details/6934135 序言 证明vptr指针存在 无继承 单继承无覆盖 单继承有 ...
- 转:C#中的多态
封装.继承.多态,面向对象的三大特性,前两项理解相对容易,但要理解多态,特别是深入的了解,对于初学者而言可能就会有一定困难了.我一直认为学习OO的最好方法就是结合实践,封装.继承在实际工作中的应用随处 ...
- python中的多态
# -*- coding: cp936 -*- #python 27 #xiaodeng #python中的多态 #多态:一个操作的意义取决于被操作对象的类型,相同的消息给予不同的对象会引发不同的动作 ...
- C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数
1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...
- python中对多态的理解
目录 python中对多态的理解 一.多态 二.多态性 三.鸭子类型 python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多 ...
- Java 中的多态,一次讲个够之接口实现关系中的多态
上文还没有写完,这一篇继续 Java 中的多态,一次讲个够之继承关系中的多态 https://www.cnblogs.com/qianjinyan/p/10824576.html 接口实现关系,和继承 ...
随机推荐
- 对jquery的 attr()和prop()理解
jquery1.6版本后引入了prop()方法,很多时候总是混淆attr()与prop()这俩,下面分析一下这俩的区别 在此之前,先来了解一下html 的attribute和property,因为jq ...
- jquery批量设置属性readonly和disabled
分享下Jquery的api中对元素应用disabled和readonly属性的方法. 1,readonly 属性设置 $('input').attr("readonly",&quo ...
- 数据结构之平衡二叉树(AVL)
一:平衡二叉树特点:平衡二叉树(Balanced binary tree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskii and Landis)于1962年首先提出的,所以又称为AVL树 ...
- 基于linux2.6.38.8内核启动过程完全解析[一]
转载: ************************************************************************************************ ...
- YYCache 设计思路
iOS 开发中总会用到各种缓存,最初我是用的一些开源的缓存库,但到总觉得缺少某些功能,或某些 API 设计的不够好用.YYCache (https://github.com/ibireme/YYCac ...
- BootStrap2学习日记16---选项卡内容
代码: <ul class="nav nav-tabs"> <li class="active"><a href="#t ...
- bing 输入法,切换简体、繁体快捷键与myeclipse 格式化代码冲突。。
bing 输入法,切换简体.繁体快捷键与myeclipse 格式化代码冲突...蛋碎 myeclipse 代码格式化快捷键是:ctrl+shift+F,bing输入法简体.繁体切换也是,于是蛋疼的事情 ...
- Apple Tree(需要预处理的树状数组)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20335 Accepted: 6182 Descr ...
- 机顶盒Demux
主页http://www.videolan.org/vlc/ 机顶盒软件开发仿真平台的设计与实现http://max.book118.com/html/2012/0311/1260745.shtm
- OC之category的用法
简介 实例 好处 一.category简介 动态的为某个已经存在的类增加方法,不可以增加成员变量 二.实例 // // Student+CatetoryStudent.h // Category // ...