您的位置:首页 > 其它

指向基类/派生类指针,指向基类成员/派生类成员指针,及互相赋值

2010-03-01 20:39 330 查看
可以安全地将一个指向基类成员的指针赋值给一个指向派生类的成员的指针,反过来不行。

另外,可将一个指向派生类对象的指针赋值给一个指向基类得指针,

即基类指针可在不加显式转换的情况下指向派生类对象。

代码测试如下,结果确实如上面所说:

#include ...

class Base

{

public:

Base() {}

virtual ~Base(){}

virtual void show() { cout << "Base"; }

};

class Derived:public Base

{

public:

Derived():Base() {}

~Derived() {}

void print() {}

void show() { cout << "Derived"; }

};

int main()

{

Base base;

Derived derived;

Base *pb = &derived; // Ok,基类指针指向派生类对象;

Derived *pd = &base; // Error,派生类指针指向基类对象;

pb->show(); //Ok,但输出 derived;

pb->print(); //Error. 不可调用仅派生类有的方法;

typedef void (Derived::*Pderived)();

Pderived pmend = & Base::show; // Ok,基类成员的指针赋值

//给派生类成员的指针

(derived.*pmend)(); // 使用派生类成员指针

typedef void (Base::*Pbase)();

Pbase pmenb = & Derived::show; // Error.派生类成员的指针

//赋值给基类成员的指针

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: