【问题标题】:Differences between using pointer to the class member and the structure member使用指向类成员和结构成员的指针之间的区别
【发布时间】:2013-10-04 12:26:28
【问题描述】:

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

}

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

请帮帮我。谢谢。

【问题讨论】:

  • classstruct 之间除了成员和基类的默认访问权限(公共与私有)之外没有区别。
  • 您将苹果与橙子进行比较,并抱怨它们不一样。

标签: c++ class pointers structure


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:
    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;
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 2014-12-29
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多