2013-10-04 129 views
0

我是C++的新手,我被告知结构和类几乎是一样的。主要区别在于C++中的类默认是私有的,而结构是公共的。使用指向类成员和结构成员的指针之间的区别

我有两个不同的代码,我们使用指针来构造成员和类成员。

struct Simple { int a; }; 
int main() { 
Simple so, *sp = &so; 
sp->a; 
so.a; 
} 

我们以上述方式使用指针指向struct成员。

为什么我们必须按照以下方式使用指向类成员的指针?

class X { 
public: 
    int a; 
    void f(int b) { 
    cout << "The value of b is "<< b << endl; 
    } 
}; 

int main() { 

    // declare pointer to data member 
    int X::*ptiptr = &X::a; 
    int X::*ptiptr1 = &X::a; 

    // create an object of class type X 
    X xobject,xobject1; 

    // initialize data member 
    xobject.*ptiptr = 10; 
    xobject->*ptiptr1 = 11; 

} 

为什么我们首先声明一个指向类数据成员的指针?为什么我们不能像我们为结构做的那样做呢?

请帮我一下。谢谢。

+2

除了成员和基类的默认访问权限(public与'private')之间'类'和'结构'。 – juanchopanza

+0

你正在比较苹果和橘子,并抱怨他们不一样。 –

回答

3

你在这里做了两件完全不同的事情。

第一个是创建一个正常的对象指针到一个特定的对象。这是指该对象,并可用于访问其任何成员。

第二个创建指针指向成员,这与对象指针非常不同。它指的是一个类成员,而不是一个特定的对象,并且可以应用于任何对象来访问该成员。

在任何一种情况下,使用class还是struct关键字来定义类是无关紧要的。这只会影响会员是否默认为私人或公共。

1
struct S { 
    int a; 
}; 

class C { 
public: 
    int a; 
}; 

而在同你做了什么struct

S so, *sp = &so; 
sp->a = 3; 
so.a = 3; 

你还可以做class

C co, *cp = &co; 
cp->a = 3; 
co.a = 3; 

而且关于指针到成员:这样的指针需要使用该实例struct/class才能用于访问此成员。非静态成员是特定于对象的,因此指针本身是无用的,除非您有一个对象,其成员可以访问:

S so; 
int S::* memberPtr = &S::a; 
so.*memberPtr = 3;