面向对象的多态性(1)
1、多态性具体来说:就是同一个函数名称,作用在不同的对象产生不同的 ,主要针对的是基类和多个派生类之间的关系
例子:
#include<iostream>
using namespace std;
class animal
{
public:void sleep(){cout << "aniaml is sleeping" << endl;}void breath(){cout << "aniaml is breathing" << endl;}
};
class fish :public animal
{
public:void breath(){cout << "fish is breathing" << endl;}
};int main()
{fish fh;animal* an = &fh;an->breath();fh.breath();system("pause");return 0;
}
在例子中,定义了一个fish和animal类的对象,并且将fish类的对象赋值给animal类的对象an,。。。这里是指针变量,将fh的地址赋给了an,按照我们的理解
an对象调用的函数应该是属于fh地址中的函数,应该调用fish::breath()函数,,,但是在c++编译的过程中,编译器进行了类型的转换,此时c++编译器认为
an对象保存的是animal对象的地址,而不是指针变量指向的fh的地址,,,,所以函数调用的是animal::breath()函数。
在构造fish类的对象时,系统首先调用的是aniaml;类的构造函数取构造animal类的对象,然后才去调用fish类的对象,,当fish;类对象转换成aniaml
对象时,该对象被认为是元对象整个内存模型中的上半部分(fish对象的内存包含(类aniam累的对象站的内存和类fish对象自身占的额内存)),主要是因为fish类
是继承animal类的,fish的对象j中包含animal类的函数以及成员。
2、静态多态性
函数的重载主要有两种:
1、函数相同,但是参数的个数和参数类型不同
2、函数的参数相同但是属于不同的类
调用形式: 对象名。函数 或者 函数名前加上类::,作用域符::,表示调用这个类的::函数
#include<iostream>
using namespace std;
class point
{int x, y;
public:point(int a, int b){x = a;y = b;}double area(){return 0;}
};
class circle :public point
{int r;
public:circle(int a, int b,int c) :point(a, b), r(c){}double area(){return 3.14*r*r;}
};int main()
{point pob(16, 15);circle cob(20, 20, 10);cout << "pob.area" << pob.area() << endl;cout << "cob.area()" << cob.area() << endl;cout << cob.point::area() << endl;//表示派生类对象调用基类成员函数system("pause");return 0;
}
面向对象的多态性(1)相关推荐
- JAVA:使用面向对象的多态性模仿会员卡消费系统,设计会员卡类,可派生不同的会员卡类型,当使用不同的会员卡消费时其折扣不同。
使用面向对象的多态性模仿会员卡消费系统,设计会员卡类,可派生不同的会员卡类型,当使用不同的会员卡消费时其折扣不同.如一般会员卡消费打9折:VIP会员卡打7折:超级VIP卡打5折.其具体的实现效果如下所 ...
- 面向对象的多态性(2)
1.虚函数 在c++中,可以调用虚函数来实现运行时的多态性,,这样可以进行函数的重载 虚函数的定义是在基类中进行的,,当吧基类中的某一个成员函数定义成虚函数之后,就可以在派生类中重新定义, 在派生类重 ...
- 面向对象之多态性(基类引用可以指向子类)
1.派生类的对象和基类是属于的关系,即 对象 is a X类,对象属于X类. 2.多态性的概念: 了解多态性之前,要熟悉引用和对象的区别: 对象存储在堆中,引用(符)存储在栈中,引用符的值是对象在堆中 ...
- 面向对象的特性(面向对象的多态性:转型,重载与重写)
对于面向对象的特性,一般有两种说法:一种是三大特性,分别是封装,继承,多态,另外一种是封装,继承,多态,抽象:需要注意的是:这是面向对象的特性,不是java的特性(面向对象): 多态:多态是面向对象很 ...
- 面向对象的多态性(3)
1.纯虚函数 当在基类中不能为虚函数给出一个有意义的实现时(就是没定义函数体中的具体内容),可以声明为纯虚函数,纯虚函数可以交给派生类来完成, 纯虚函数的作用只是为派生类提供一个一致的借口,,, 纯虚 ...
- java 面向对象的多态性——向上转型与向下转型
目录 类定义了之后需要被调用定义对象才能执行. 在前几篇中讨论了抽象类和接口,其中抽象方法是对这样的动作的抽象描述:动作名称相同,但不同类别具体执行动作的内容不同. 如:人类有"工作&quo ...
- 面向对象方法综述(工具<方法<思维<价值观)
思想起源于上世纪六十年代(和结构化方法一样) 最早的OOPL:Simula67 最纯的OOPL:Smalltalk smalltalk的贡献:它在系统设计中强调对象概念的统一,引入对象,对象类,方法, ...
- java第四节 类的继承/抽象/接口/多态性
/* 类的继承 类的继承可以简化类的定义 java只支持单继承,不允许多重继承 可以有多层继承,即一个类可以继承其一个类的子类,如类B继承了类A,类C又可以继承类B 那么类C也间接继承了类A子类继承父 ...
- C++中多态性学习(上)
多态性学习(上) 什么是多态? 多态是指同样的消息被不同类型的对象接收时导致不同的行为.所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数.虽然这看上去好像很高级的样子 ...
最新文章
- java程序设计编程题_20165237 2017-2018-2 《Java程序设计》第十周考试补做及编程题...
- 1920+1080+android三星手机,三星Galaxy Note3能拍摄1080p视频吗?支持1080p播放吗?
- php curl https 443,PHP CURL支持HTTP、HTTPS 请求亲测可用
- Python sqrt() 函数
- mvc 调用其他控制器方法session丢失_Java从入门到放弃;MVC 模式
- MySQL binlog日志三种模式选择及配置
- 基于java的心理健康网站的设计与实现_心理评测网站设计与实现(JSP,MySQL)(含录像)...
- c语言三角函数乘法怎么表示,这个图里的三角函数 要怎么用c语言打出来
- 毕业论文免费查重软件测评及降重心得
- 零基础学UI设计教程之图标的设计形式讲解
- 数学建模国赛论文latex代码汇总
- stm32晶振匹配电容_晶振的匹配电容选择
- Amos中介效应检验
- [GUI] 使用MATLAB从图片中提取曲线数据
- 用java编程100道问题//10弟弟的作业,口算训练
- 如何使用vue开发公众号网页
- 浅谈framework之PowerManagerService
- 华为ENSP实验--基础
- 江苏省计算机高考试题,08-12江苏省单招计算机原理高考试题汇总
- 长沙有哪些优秀的互联网公司?长沙适合定居吗?