C++面向对象多态与虚函数

首先要明白多态指的什么, 通俗点的话是 同一函数实现不同的功能,这点区别于多态。

我个人理解的多态就是一些功能不同的函数可以使用统一函数名,也就是一个函数名可以调用内容不同功能不同的函数。

比如,将父对象设置成为更多的他的子对象相等的功能,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.

具体看这个代码(纯虚函数),

#include <bits/stdc++.h>
using namespace std;

class Shape {
	public:
		virtual double printArea()=0;
};
class Circle:public Shape {
	public:
		Circle(double a):r(a){};
		double printArea();
	private:
		double r;
};
double Circle::printArea(){
	cout<<"圆的面积为";
	cout<<acos(-1.0)*r*r<<endl;
	return acos(-1.0)*r*r;
}
class Rectangle:public Shape{
	public:
		Rectangle(double aa,double bb):a(aa),b(bb){};
		double printArea();	
	private:
		double a,b;	
};
double Rectangle::printArea(){
	cout<<"矩形面积为:";
	cout<<a*b<<endl;
	return a*b;
}
class Triangle:public Shape{
	public:
		Triangle(double aa,double bb):h(aa),w(bb){};
		double printArea();	
	private:
		double h,w;	
	
};
double Triangle::printArea(){
	cout<<"三角形的面积为:";
	cout<<h*w/2<<endl;
	return h*w/2;
}
int main(){
	Circle x(1.0);
	Rectangle y(2.0,1.0);
	Triangle z(1.0,2.0);
	x.printArea();
	y.printArea();
	z.printArea();
	Shape* p[3];
	p[0]=&x,p[1]=&y,p[2]=&z;
	double res = 0.0;
	for(int i=0;i<3;i++){
		res += p[i]->printArea();
	}
	cout<<"三个图形面积为:";
	cout<<res<<endl; 
	return 0;
}


再例如这个(虚函数):

#include <iostream>
using namespace std;

class Operator{
	public:
		Operator(double x,double y);
		virtual double getResult();
	protected:
		double a,b;
};
Operator::Operator(double x,double y){
	a = x;
	b = y;
}
double Operator::getResult(){
	return a*b;
}
class OperatorAdd:public Operator{
	public:
		OperatorAdd(double x,double y):Operator(x,y){}
		double getResult();
};
double OperatorAdd::getResult(){
	return a+b;
}
class OperatorSub:public Operator{
	public:
		OperatorSub(double x,double y):Operator(x,y){}
		double getResult();
};
double OperatorSub::getResult(){
	return a-b;
}

int main(){
	Operator x(1,2);
	OperatorSub y(3,3);
	OperatorAdd z(1,1);
	Operator *ptr = &x;
	cout<<ptr->getResult()<<endl;
	ptr = &y;
	cout<<ptr->getResult()<<endl;
	ptr = &z;
	cout<<ptr->getResult();
	return 0;
}
综上,虚函数实现的是子类(用指针)访问子类的函数的方法。(个人理解,不太严谨)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值