c++ virtual函数使用
2017-03-09 本文已影响434人
HenryTien
Why use virtual functions? [duplicate]
当要操作多个对象的时候,可以在派生类中自定义基类的成员函数,这样便于更加灵活方便的使用接口(自定义的感觉)
你的基类是一个形状,派生类有矩形 三角形 圆形 ,你想画出这些形状,这个时候,你可以抽象定义一个画图形的这个函数为基类,并加上virtual,然后在派生类中你就可以自定实现各种图形的功能啦,如果没有,可能基类定义的是画矩形的,并不适用画三角形哦。
在派生类中对virtual 函数直接赋值为0,这样变欧式我们定义了一个抽象类。
来看看代码吧;
class Shape
{
public:
virtual void draw() = 0;
virtual ~Shape() {}
};
class Rectange: public Shape
{
public:
void draw() { // draw rectangle here }
};
class Circle: public Shape
{
public:
void draw() { // draw circle here }
};
Now you can have vector of different shapes:
vector<Shape*> shapes;
shapes.push_back(new Rectangle());
shapes.push_back(new Circle());
And you can draw all shapes like this:
for(vector<Shape*>::iterator i = shapes.begin(); i != shapes.end(); i++)
{
(*i)->draw();
}
#include <iostream>
using namespace std;
class A
{
public:
A(int xp = 0) {
x = xp;
}
void SetX(int xp) {
x = xp;
}
void print() {
cout << "this is x in A" << endl;
}
private:
protected:
int x;
};
class B :virtual public A { // B 由A虚基类派生而来
};
class C :virtual public A {
};
class D :public C, public B {
};
int main() {
D d;
d.SetX(5);
d.print();
d.A::print();
d.B::print();
d.C::print();
system("pause");
return 0;
}