1.定义类函数
虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数,即用父类的指针调用子类的函数。
class A
{
public:
virtual void foo() {
cout << "A::foo() is called" << endl;
}
};
class B: public A
{
public:
virtual void foo() {
cout << "B::foo() is called" << endl;
}
};
A * a = new B(); //父类类型的指针指向子类类型的对象,从而实现父类调用子类函数。
a->foo(); // a虽然是指向A的指针,但是被调用的函数(foo)却是B的
tips:
1.作为通常的原则,如果一个类定义了虚函数,那么它的析构函数就应当是virtual的。
2.友元函数 构造函数 static静态函数 不能用virtual关键字修饰;
普通成员函数 和析构函数 可以用virtual关键字修饰。
3.多态性
指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。
a.编译时多态性:通过重载函数实现
b 运行时多态性:通过虚函数实现。
2.纯虚函数
类似与java的接口,带有纯虚函数的类称为抽象类。抽象类不能被实例化。
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
…
};
例如:
class point
{
public:
point(int i=0, int j=0) { x0=i; y0=j; }
virtual void set() = 0;
virtual void draw() = 0;
protected:
int x0, y0;
};
3.虚继承
C++使用虚拟继承(Virtual Inheritance),解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题。
多重继承->二义性->虚拟继承解决
class 派生类: virtual 基类1,virtual 基类2,...,virtual 基类n
{
...//派生类成员声明
};