使用指向类成员和结构成员的指针之间的差异
Differences between using pointer to the class member and the structure member
我是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;
相关文章:
- 从成员指针到整个结构/类的强制转换
- OOP 中的单成员指针
- 使用结构成员指针在C++中填充结构
- 聚合初始化,将成员指针设置为同一结构成员
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 共享 C++ 的数据成员指针
- 如何声明指向成员内容的成员指针m_pmd/m_pmf并访问它们?
- 从类C++外部调用指向成员方法的成员指针
- 结构成员指针是否自动初始化为零?
- 如何删除类内类类型的类成员指针
- 是否打印指向已定义 int 的成员指针
- 指向常量的成员指针
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- 无法删除在destructor中的成员指针的课程
- 删除对象而不调用成员指针的析构函数
- 当派生类的基类具有成员指针时,对其进行深层复制