关于c++的virtual关键字

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

{

...//派生类成员声明

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值