时间:2020年07月27日 | 作者 : aaronyang | 分类 : C++ | 浏览: 636次 | 评论 0 人
新建一个多态demo.cpp
#include <iostream> using namespace std; class Shape { protected: int width, height; public: Shape(int a = 0, int b = 0) { width = a; height = b; } int area() { cout << "Parent class area :" << endl; return 0; } }; class Rectangle : public Shape { public: Rectangle(int a = 0, int b = 0) :Shape(a, b) { } int area() { cout << "Rectangle class area :" << endl; return (width * height); } }; class Triangle : public Shape { public: Triangle(int a = 0, int b = 0) :Shape(a, b) { } int area() { cout << "Triangle class area :" << endl; return (width * height / 2); } }; // 程序的主函数 int main() { Shape* shape; Rectangle rec(10, 7); Triangle tri(10, 5); // 存储矩形的地址 shape = &rec; // 调用矩形的求面积函数 area shape->area(); // 存储三角形的地址 shape = &tri; // 调用三角形的求面积函数 area shape->area(); system("pause"); return 0; }
父类 *父类实例
父类实例=&子类实例;
很明显输出的,是父类的area,并没有多态
导致错误输出的原因是,调用函数 area() 被编译器设置为基类中的版本,这就是所谓的静态多态,或静态链接 - 函数调用在程序执行前就准备好了。有时候这也被称为早绑定,因为 area() 函数在程序编译期间就已经设置好了。
修改父类的方法
修改后编译结果:
虚函数
虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。
这个C#也有,不过不标记,子类不能重写,标记了,可以重写
纯虚函数
类似C#的abstract,抽象方法,子类必须实现,父类定义后无需具体实现
class Shape { protected: int width, height; public: Shape( int a=0, int b=0) { width = a; height = b; } // pure virtual function virtual int area() = 0; };
同样的,C++中,子类也必须有实现
子类给了实现后
不报错了。
C++的接口知识,就是用 这个 =0 的写法定义接口
也就是抽象类了,
它不像C#的接口一样用interface IClassA
还有个 C++访问 static int AA这种静态类型的,用双冒号
public class BBA{
static int AA;
}
类实现
int BBA::AA=10;
AYUI www.ayjs.net AY 杨洋
推荐您阅读更多有关于“C++,”的文章
抖音:wpfui 工作wpf,目前主maui
招聘合肥一枚WPF工程师,跟我一个开发组,10-15K,欢迎打扰
目前在合肥市企迈科技就职
AYUI8全源码 Github地址:前往获取
杨洋(AaronYang简称AY,安徽六安人)和AY交流
高中学历,2010年开始web开发,2015年1月17日开始学习WPF
声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费
不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo
查看捐赠AYUI7.X MVC教程 更新如下:
第一课 第二课 程序加密教程
额 本文暂时没人评论 来添加一个吧
发表评论