什么是object.classname种类?

时间:2015-06-26 08:52:21

标签: c++

考虑这个课程:

struct Foo {
  int bar;
  Foo(){}
  Foo(int a) {
    bar = a;
  }
};

现在,我有两种方法可以访问成员bar

Foo foo(1234);
cout << foo.bar << endl;
cout << foo.Foo::bar << endl;

但我不知道foo.Foo的类型是什么:

using namespace foo.Foo; //error, because foo.Foo is not a namespace
foo.Foo baz; //error, because foo.Foo is not a class

请告诉我什么是foo.Foo

3 个答案:

答案 0 :(得分:3)

foo.Foo不是什么。 Foo::barbar类的Foo成员,foo.Foo::bar是实例bar中的Foo成员foo成员}}

如果您的名称与多重继承冲突,则通常使用该语法。考虑这个例子:

struct A{int bar;};
struct B{int bar;};
struct C:A,B{};

现在,以下代码含糊不清:

C c;
std::cout << c.bar;

我们需要说出我们想要的bar

C c;
std::cout << c.A::bar;
std::cout << c.B::bar;

答案 1 :(得分:1)

它不是(foo.Foo):: bar,它是foo。(Foo :: bar)和Foo :: bar是吧

这在这个例子中很有用:

struct A{
    int i;
};
struct B{
    int i;
};

class C : public A, B{
};

int main(){
    C c;
    c.i = 0;   // request for member 'i' is ambiguous
}

您应该使用名称空间A和B来访问数据,A::iB::i

答案 2 :(得分:0)

默认情况下,struct的成员是公共的,所以你可以访问带有点和范围分辨率(::)运算符的memebrs.So foo.Foo::bar与foo.bar相同。