C++多态

发表评论 阅读评论

C++是真正的的OOP(面向对象程序)语言,语言本身支持多态(Polymorphism)特性。
所谓多态特性就是通过调用父类类型对象的函数可以调用到子类的同名函数。
例如:A类有print方法,B类继承A类,通过调用a调用print可以调用到B类的print函数。 当然对于像AS3/Java这样的OOP语言,对于多态没有什么限制,但是对于C++还是稍有些限制的。

C++虚函数用法

在声明时添加virtual修饰符,函数将变成虚函数(Virtual Function),如果在虚函数结尾添加添加=0将变成纯虚函数(Pure Virtual Function),纯虚函数不能有实现,只能在子类中实现。

// 虚函数
virtual void foo();
// 纯虚函数
virtual void foo() = 0;

C++多态的必要条件:

  1. 调用者必须是指针
  2. 调用者的实际类型必须是指针的子类
  3. 要调用的函数必须在指针类型或其基类的类型中有被声明为虚函数

示例

#include <iostream>

using namespace std;

class A
{
public:
    void foo() { cout << "A::foo()n"; }
};
class B : public A
{
public:
    void foo() { cout << "B::foo()n"; }
};
class C : public B
{
public:
    virtual void foo() { cout << "C::foo()n"; }
};
class D : public C
{
public:
    void foo() { cout << "D::foo()n"; }
};

int main()
{
    D d;
    // 不是多态,调用者不是指针
    d.foo();   // D::foo()
    B* pb = &d;
    // 不是多态,B类型及基类的foo函数没有虚函数
    pb->foo(); // B::foo()
    D* pd = &d;
    // 不是多态,调用者指针类型与实际类型相同
    pd->foo(); // D::foo()
    C* pc = &d;
    // 是多态
    pc->foo(); // D::foo()
    system("PAUSE");
    return 0;
}
标签: , ,

  1. 重庆SEO | | #1

    学过一段时间的C语言,但是还是每年有搞懂,C++感觉更难弄。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
回到顶部