使用指向类成员和结构成员的指针之间的差异

Differences between using pointer to the class member and the structure member

本文关键字:成员 指针 之间 结构      更新时间:2023-10-16

我是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;
}

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

请帮帮我。谢谢。

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

第一种是创建指向一个特定对象的普通对象指针。这是指该对象,可用于访问其任何成员。

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

无论哪种情况,类是使用 class 还是 struct 关键字定义都无关紧要。这只会影响成员默认为私有还是公共。

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;