- 论坛徽章:
- 0
|
Bjarne Stroustrup著 裘宗燕译 C++程序设计语言(特别版) Page373/374
从书上理解:可以安全地将一个指向基类成员的指针赋值给一个指向派生类的成员
的指针,反过来不行。
另外,可将一个指向派生类对象的指针赋值给一个指向基类得指针,
即基类指针可在不加显式转换的情况下指向派生类对象。
不懂的地方:上述两个规则都是为了维护一种基本保证:如果一个对象所提供的性
质少于某个指针允诺的话,该指针就不能指向这个对象。
达人请帮忙解释一下我不懂的地方,谢谢。
代码测试如下,结果确实如上面所说:
#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.派生类成员的指针
//赋值给基类成员的指针
} |
|