目录
虚函数(virtual function)
在C++中,如果一个类继承自其它类,且重写了父类中的一个函数,那么当该函数被调用时,实际执行的是子类中的同名函数,而不是父类中的函数。
这个特性叫做函数重写(override)或者虚函数(virtual function)。
形式:
vitual void func() = 0;
目的:
1、统一接口;
2、强制实现;
#include<iostream>
using namespace std;
class A
{
public:
virtual void show() // 在函数声明前面加上关键字virtual
{
cout<<"AAAAAA"<<endl;
}
};
class B:public A
{
public:
void show()
{
cout<<"BBBBBB"<<endl;
}
};
int main()
{
A a;
B b;
a.show(); // 输出结果为“AAAAAA”
b.show(); // 输出结果为“BBBBBB”
return 0;
}
/*在这个程序中,类AX继承自类A,重写了A中的show函数。
因此在创建类AX的对象b并调用它的show函数时,实际执行的是AX中的show函数,而不是A中的show函数。
因此输出的结果是“BBBBBBBBBBBBB”,而不是“AAAAAAAAAAAAA”。
*/
示例
#include <iostream>
using namespace std;
class shape{
public:
//纯虚函数;
virtual double getC(void) = 0;
};
class Cir:public shape{
public:
//构造函数:初始化表
Cir(double ri):r(ri) { }
double getC(void)
{
return 2*3.14*r;
}
private:
int r;
};
class Tri:public shape{
public:
Tri(double a, double b, double c):e1(a),e2(b),e3(c){ }
double getC(void)
{
return e1+e2+e3;
}
private:
double e1;
double e2;
double e3;
};
class Rec: public shape{
public:
Rec(double e)
{
this->e = e;
}
double getC(void)
{
return 4*e;
}
private:
double e;
};
double countC(shape *arr[], int n)
{
double sum = 0;
for(int i = 0; i < n; i++)
{
sum += arr[i]->getC();
}
return sum;
}
int main()
{
Cir c(2);
Rec r(3);
Cir c1(2);
Tri t(4, 5, 6);
shape *arr[] = {&c, &r, &c1, &t};
cout << "total C: "<<countC(arr, 4) << endl;
}