[英]C++ Inheritance accessing a non-virtual function in derived class from base class pointer
[英]Base pointer consistence in a non-virtual single inheritance class hierarchy
是否可以安全地假设在非虚拟的单继承类层次结构(涉及或不涉及模板)中,子类和父类的基类指针相同? 根类的第一个成员也始终位于同一位置(第一个隐含第二个,但这是我主要关注的问题) 。
struct parent {
int type_ = 0;
parent(int type):type_(type) {}
};
struct child: parent {
child():parent(1) {}
};
child ch;
printf("parent %p\r\n", &static_cast<parent&>(ch).type_);
printf("child %p\r\n", &static_cast<child&>(ch).type_); // :)
从我的C ++-fu,常识和测试来看,它应该是正确的,但是我正在寻找符合C ++标准的答案以使我感到舒适。 :)
PS : 请参阅ideone.com上的代码。
您的两个类都是“ standard-layout class”的示例。 标准规定,此类必须与C
风格的内存布局兼容。 这意味着,指向类对象的指针始终与指向类的第一个数据成员的指针相同。 因此,是的,它是标准要求的。 (我现在正在尝试查找对“ standard-layout类”的引用)。
编辑 :( 此问题的定义,我手边没有标准,抱歉)
标准布局类是这样的类:
您始终可以将派生类转换为基类。
class Base{
public:
int n;
};
class Derived: public base{
};
//you can do this:
Derived obj;
Base *p = &obj;//just take the derived address and put in base pointer, without cast.
cout<<p->n;
这意味着基础成员始终位于派生对象的开头,并且顺序相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.