0

我是 C++ 新手。有人告诉我结构和类几乎相同。主要区别是 C++ 中的类默认情况下是私有的,而结构是公共的。

我有两个不同的代码,我们在其中使用指向结构成员和类成员的指针。

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

我们以上述方式使用指向结构成员的指针。

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

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;

}

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

请帮帮我。谢谢。

4

2 回答 2

4

你在这里做了两件非常不同的事情。

第一个是创建一个指向一个特定对象的普通对象指针。这指的是那个对象,并且可以用来访问它的任何成员。

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

在任何一种情况下,是否使用classorstruct关键字定义类都无关紧要。这只会影响成员是否默认为私有或公共。

于 2013-10-04T12:31:59.927 回答
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;
于 2013-10-04T12:35:43.200 回答