C++ 虚函数
时间:2019-11-16
本文章向大家介绍C++ 虚函数,主要包括C++ 虚函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
父类函数不加virtual关键词,子类继承后,当父类指针指向子类指针,同样的函数,会执行父类的函数。子类的函数实际是被隐藏了,如果用子类的指针指向自己的话,是能够执行的。
#include <iostream>
/**
* C++多态 虚函数
*/
using namespace std;
class Shape {
public:
Shape();
~Shape();
double calcArea();
};
class Circle : public Shape {
public:
Circle(double r);
~Circle();
double calcArea();
protected:
double m_dR;
protected:
string m_strName;
};
class Rect : public Shape {
public:
Rect(double width, double height);
~Rect();
double calcArea();
protected:
double m_dWidth;
double m_dHeight;
};
Rect::Rect(double width, double height) {
m_dHeight = height;
m_dWidth = width;
cout << "Rect::Rect()" << endl;
}
double Rect::calcArea() {
cout << "Rect::calcArea()" << endl;
return m_dWidth*m_dHeight;
}
Rect::~Rect() {
cout << "~Rect()" << endl;
}
Circle::Circle(double r) {
m_dR = r;
cout << "Circle()" << endl;
}
double Circle::calcArea() {
cout << "Circle::calcArea()" << endl;
return 3.14 * m_dR * m_dR;
}
Circle::~Circle() {
cout << "~Circle()" << endl;
}
Shape::Shape() {
cout << "Shape()" << endl;
}
Shape::~Shape() {
cout << "~Shape()" << endl;
}
double Shape::calcArea() {
cout << "Shape::clacArea()" << endl;
}
int main() {
Shape *shape=new Rect(3,6);
Shape *shape1=new Circle(5);
shape->calcArea();
shape1->calcArea();
delete(shape);
delete(shape1);
return 0;
}
运行的结果
Shape()
Rect::Rect()
Shape()
Circle()
Shape::clacArea() //父类的方法
Shape::clacArea() //父类的方法
~Shape()
~Shape()
加上virtual关键词后
#include <iostream>
/**
* C++多态 虚函数
*/
using namespace std;
class Shape {
public:
Shape();
~Shape();
virtual double calcArea();
};
//虚继承
class Circle : public Shape {
public:
Circle(double r);
~Circle();
double calcArea();
protected:
double m_dR;
protected:
string m_strName;
};
//虚继承
class Rect : public Shape {
public:
Rect(double width, double height);
~Rect();
double calcArea();
protected:
double m_dWidth;
double m_dHeight;
};
Rect::Rect(double width, double height) {
m_dHeight = height;
m_dWidth = width;
cout << "Rect::Rect()" << endl;
}
double Rect::calcArea() {
cout << "Rect::calcArea()" << endl;
return m_dWidth*m_dHeight;
}
Rect::~Rect() {
cout << "~Rect()" << endl;
}
Circle::Circle(double r) {
m_dR = r;
cout << "Circle()" << endl;
}
double Circle::calcArea() {
cout << "Circle::calcArea()" << endl;
return 3.14 * m_dR * m_dR;
}
Circle::~Circle() {
cout << "~Circle()" << endl;
}
Shape::Shape() {
cout << "Shape()" << endl;
}
Shape::~Shape() {
cout << "~Shape()" << endl;
}
double Shape::calcArea() {
cout << "Shape::clacArea()" << endl;
}
int main() {
Shape *shape=new Rect(3,6);
Shape *shape1=new Circle(5);
shape->calcArea();
shape1->calcArea();
delete(shape);
delete(shape1);
return 0;
}
运行结果
Shape()
Rect::Rect()
Shape()
Circle()
Rect::calcArea() //子类自己的函数
Circle::calcArea()//子类自己的函数
~Shape()
~Shape()
原文地址:https://www.cnblogs.com/wuyanzu/p/11874063.html
- 后短信集成时代
- jQuery仿极客公园火箭发射“返回顶部”效果(WordPress代码篇)
- Windows 2008 R2 Server Core .NET环境配置
- Request——Node世界中被依赖最多的库No.2
- 在传统.NET Framework 上运行ASP.NET Core项目
- .net core快速上手
- logicaldoc的外部认证——AD集成
- CLR 4.0 安全模型
- 应用工具 .NET Portability Analyzer 分析迁移dotnet core
- 使用无觅相关文章插件一定要删除的代码
- 管理混合云环境的5个要点
- Team Foundation Server 2010 – Basic Installation
- 富文本编辑器的一键排版功能
- 通过ProGet搭建一个内部的Nuget服务器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法