多态性是面向对象程序设计的重要特征之一。多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。

多态的实现方式包括以下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++中的多态的更多相关文章

  1. 13、java中的多态

    1,多态的体现 父类的引用指向了自己的子类对象. 父类的引用也可以接收自己的子类对象.2,多态的前提 必须是类与类之间有关系.要么继承,要么实现. 通常还有一个前提:存在覆盖. 3,多态的好处 多态的 ...

  2. java中实现多态的机制是什么?

    多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次 ...

  3. C#中区别多态、重载、重写的概念和语法结构

    C#中区别多态.重载.重写的概念和语法结构 重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual ...

  4. 转载:C#中的多态

    原文地址 http://www.cnblogs.com/jhxk/articles/1644018.html  感谢博主分享! 之前看到过类似的问题:如果面试时主考官要求你用一句话来描述多态,尽可能的 ...

  5. c++中虚多态的实现机制

    c++中虚多态的实现机制 參考博客:http://blog.csdn.net/neiloid/article/details/6934135 序言 证明vptr指针存在 无继承 单继承无覆盖 单继承有 ...

  6. 转:C#中的多态

    封装.继承.多态,面向对象的三大特性,前两项理解相对容易,但要理解多态,特别是深入的了解,对于初学者而言可能就会有一定困难了.我一直认为学习OO的最好方法就是结合实践,封装.继承在实际工作中的应用随处 ...

  7. python中的多态

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python中的多态 #多态:一个操作的意义取决于被操作对象的类型,相同的消息给予不同的对象会引发不同的动作 ...

  8. C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数

    1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...

  9. python中对多态的理解

    目录 python中对多态的理解 一.多态 二.多态性 三.鸭子类型 python中对多态的理解 一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多 ...

  10. Java 中的多态,一次讲个够之接口实现关系中的多态

    上文还没有写完,这一篇继续 Java 中的多态,一次讲个够之继承关系中的多态 https://www.cnblogs.com/qianjinyan/p/10824576.html 接口实现关系,和继承 ...

随机推荐

  1. iOS抗锯齿的方式

    iOS开发中,有时候展示图片等内容的时候,会出现锯齿.比如笔者最近使用 iCarousel 控件的Cover flow效果来展示几幅图片时,两侧的图片出现了较为严重的锯齿,着实不好看.这里列出两个方式 ...

  2. J2SE J2EE J2ME的区别

    J2SE J2EE J2ME的区别 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不 ...

  3. star

    Astronomers often examine star maps where stars are represented by points on a plane and each star h ...

  4. 1.6.8 Content Streams

    1. Content Streams 当RequestHandlers请求基于URL路径来访问时,SolrQueryRequest包含了请求的参数,同样包含了ContentStreams(包含了大容量 ...

  5. 【Android 界面效果39】android:inputType问题

    1.  在XML代码中实现比较简单, 直接设置android:inputType="textMultiLine": [mw_shl_code=java,true]<EditT ...

  6. emoji表情符处理替换成空格

    /**    * 用filterOffUtf8Mb4    * Description: 过滤率四个字节的utf-8字符(emoji表情符),替换成四个空格.    *         四字节utf- ...

  7. 20145102 《Java程序设计》第1周学习总结

    20145102 <Java程序设计>第1周学习总结 教材学习内容总结 linux下对于java的安装是非常简便的,只要参照ArchWiki就可以快速安装,没有Windows上那么复杂.I ...

  8. a different object with the same identifier value was already associated withthe session异常解决方案

    异常信息: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was ...

  9. hdu 3308 LCIS 线段树

    昨天热身赛的简单版:LCIS.昨天那题用树链剖分,不知道哪里写错了,所以水了水这题看看合并.更新方式是否正确,发现没错啊.看来应该是在树链剖分求lca时写错了... 题目:给出n个数,有两种操作: 1 ...

  10. Android 软键盘操作

    <activity android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", ...