C++中的多态

来源:互联网 发布:单片机体温计课程设计 编辑:程序博客网 时间:2024/06/08 17:24
今天我想给自己写点东西最近感觉遇到了瓶颈,博客也有一段时间没有更新了,这段时间很迷茫很困惑,感觉不知道如何去学C++了,也没有了当初的那种热情。学习C++也有一段时间了,当自己想要去实现一个项目的时候才发现自己的不足,没有头绪,完全不知从何下手。然后就这样浑浑噩噩的度过了一段时间。有时候也在想自己是不是不适合编程,后来也想通了,自己下定决心要做的事难道就这么放弃了吗?这不是我!加油吧!!!

1.1.对C++多态的理解:
如果有几个似而不完全相同的对象,有时我们要求在向它们发出同一个消息时,它们的反应各自不同,分别执行不同的操作。这种现象就是多态现象。
举个例子:ABC3个班是高三年级,他们有基本相同的属性和行为,在同时听到上课铃声的时候,他们会分别走向3个不同的教室,而不会走向同一个教室。
多态的意义:
由继承而产生的相关的不同的类,其对象对同一消息做出的不同响应。(能增加程序的灵活性,可减轻系统升级,维护,调试的工作量和复杂度)

1.2.多态实现的前提:
赋值兼容:需要积累对象的任何地方都可以使用公有派生类的对象来替代。赋值兼容是一种默认行为,不需要任何的显示转化步骤。

赋值兼容中所指的替代包括以下几种情况:
1、派生类的对象可以赋值给基类对象。
2、派生类的对象可以初始化基类的引用。
3、派生类对象的地址可以赋给指向基类的指针。
在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。

#include <iostream>using namespace std;class Shape{public:    Shape(int x,int y)        :_x(x),_y(y){}void draw(){    cout<<"draw Shap ";    cout<<"start ("<<_x<<","<<_y<<") "<<endl;}//private:protected:    int _x;    int _y;};class Circle:public Shape{public:    Circle(int x, int y,int r)        :Shape(x,y),_r(r){}void draw(){    cout<<"draw Circle ";    cout<<"start ("<<_x<<","<<_y<<") ";    cout<<"radio r = "<<_r<<endl;}private:    int _r;};int main(){    Shape s(3,5);    s.draw();    Circle c(1,2,4);    c.draw();    s = c;    s.draw();//派生类对象给基类赋值;    Shape &rs = c;//派生类的对象初始化基类的引用;    rs.draw();    Shape *ps = &c;//派生类对象的地址赋值给指向基类的指针;    ps->draw();    return 0;}

1.3.多态形成的条件
1.3.1.静多态,通过命名傾栈在编译阶段决定(函数重载)
1.3.2.动多态,在运行阶段决定,不是在编译阶段决定。
1.4.虚函数

格式class 类名{        virtual 函数声明;};

虚函数小结
1.在基类中用virtual声明成员函数为虚函数,类外实现虚函数时,不用再加vritual。
2.在派生类中重新定义此函数称为覆写,要求函数名、返回类型、函数参数个数及类型全部匹配。并根据派生类的需要重新定义函数体。
3.当一个成员函数被声明为虚函数后,其派生类中完全相同的函数(显示的写出)也为虚函数。可以在其前加virtual以似清晰。
4.定义一个指向基类对象的指针,并使其指向其子类的对象,通过该指针调用虚函数,此时调用的就是指针变量指向对象的同名函数。

纯虚函数

**格式**class 类名{    virtual 函数声明 = 0;};

举个勺子
Shape 类中
virtual void draw() = 0;
Circle 类中

void draw(){    cout << "draw Circle";    cout << "start (" << _x << "," << _y << ")";    cout << "radio r = " << _r << endl;}

测试

int main(){    Shape s(1,2);//纯虚函数又称抽象基类;    Circle c(1,2,3);    Rect r(1,2,3,5);    Shape *pc = &c;    pc->draw();    pc = &r;    pc->draw();    return 0;}

纯虚函数小结
1.含有纯虚函数的类称为抽象基类,不可实例化(即不能创建对象)。存在的意义就是被继承,提供公共接口
2.纯虚函数只有声明,没有实现。

含有虚函数的析构
含有虚函数的类,析构函数也应该声明为虚函数。在delete分类指针的时候,会调用类的析构函数,实现完整析构。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 成都二胎准生证怎么办 民政局怎么办离婚手续 社保断保怎么办 忘记社保编号怎么办 社保忘记密码怎么办 买卖二手房违约怎么办 2018年准生证怎么办 流动人口证怎么办 三方扣税协议怎么办 迁移证怎么办 异地上学高考怎么办 灯壳黄了怎么办 香港没有电话号码怎么办 足疗店营业执照怎么办 十字路口堵车怎么办 党政一把手不合怎么办 高考密码忘记怎么办 考生密码忘记怎么办 快递被补签了怎么办 补录签收怎么办 福州办理居住证怎么办 高考密码修改怎么办? 高考报名超时怎么办 小升初外地户口怎么办 没填志愿怎么办 土地没有入账怎么办 山姆店会员怎么办 新车味儿大怎么办 越南批文怎么办 大数据黑名单怎么办 榻榻米甲醛超标怎么办 大便器堵塞怎么办 淤泥堵塞下水道怎么办 沙灰堵着下水道怎么办 下水道被泥堵了怎么办 外地户口怎么办暂住证 想买车没居住证怎么办 软件转让服务器怎么办 下线车到期怎么办 投诉学校应该怎么办 学校收手机怎么办