指向基类/派生类指针,指向基类成员/派生类成员指针,及互相赋值
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.派生类成员的指针
//赋值给基类成员的指针
}
另外,可将一个指向派生类对象的指针赋值给一个指向基类得指针,
即基类指针可在不加显式转换的情况下指向派生类对象。
代码测试如下,结果确实如上面所说:
#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.派生类成员的指针
//赋值给基类成员的指针
}
相关文章推荐
- 指向基类/派生类指针,指向基类成员/派生类成员指针,及互相赋值
- OJ——指向基类的指针访问派生类的成员函数
- [疑问]C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?
- YTU-OJ-Problem J: B3 指向基类的指针访问派生类的成员函数
- C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?
- 指向派生类对象的基类指针与虚函数
- C++ 基类指针指向派生类对象
- 派生类的赋值运算符也必须处理它的基类成员的赋值(源自effictive c++)
- 第十六周oj刷题——Problem J: B3 指向基类的指针访问派生类的成员函数
- 基类的指针指向派生类的对象
- 面向对象--多继承&派生类对象内存布局分析&各基类指针所指向的位置分析
- 关于指向派生类的基类指针或引用
- C++ 派生类指针强制指向基类对象
- C++ 派生类指针指向基类对象
- 解释为什么基类的析构函数不为虚的话,基类指针指向子类对象,删除对象时,派生类的析构函数就不会被调用
- 基类指针指向派生类
- C++ 派生类指针强制指向基类对象
- C++ 基类指针指向派生对象/派生类指针指向基类对象
- 关于孙鑫MFC视频第三章中this指针指向基类还是派生类的测试程序
- 基类指针指向派生类