【问题标题】:Confused about the point of class member in C++对 C++ 中类成员的意义感到困惑
【发布时间】:2014-04-12 14:02:09
【问题描述】:

如下三个类:

class Base
{
public:
    int var1;
};
class Base2
{
public:
    int var2;
};
class Derive:public Base,public Base2
{
public:
    int var3;
};
int main()
{

    printf("%d %d %d %d %d", &Base::var1, &Base2::var2, &Derive::var1, &Derive::var2, &Derive::var3);
    int Derive::* p = &Derive::var1;
    Derive d;
    d.var1 = 2;
    printf("%d", d.*p);
}

输出结果为0 0 0 0 8 2。我对&Derive::var1&Derive::var2 的结果感到困惑。为什么它们分别等于0 而不是04

注意:我用 gcc4.7.1 和 vs2010 测试过。结果是一样的。

【问题讨论】:

  • 如果您认为它们中的任何一个应该等于不为零的值,您应该考虑包含 all 的相关代码...您发布的任何内容都没有包含此内容。
  • 为了指向成员,你至少应该有一个实例!
  • @πάνταῥεῖ 您不需要实例来获取指向成员函数的指针即可调用它。
  • @πάνταῥεῖ 乍一看我也这么认为,但请注意这是有效的语法。 &Foo::a 会将偏移量返回给成员
  • @Paranaix 我知道这一点,并且它是有效的语法!我的想法是:使用实例的 real 成员地址应该给 OP 一些说明。

标签: c++ member-pointers


【解决方案1】:

正如@HerbSutter 在Address of C++ pointer to class data member in Visual Studio 中的回答,:

&Derive::var1 的类型是int Base::* 而不是int Derive::*

&Derive::var2 的类型是int Base2::* 而不是int Derive::*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 2020-04-19
    • 2021-12-15
    • 2018-01-11
    • 2011-02-02
    • 2011-06-10
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多