我是c ++的新手。我被告知结构和类几乎相同。主要区别是c ++中的类默认是私有的,而结构是公共的。
我有两个不同的代码,我们使用指针来构造成员和classe成员。
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;
}
为什么我们首先声明指向类数据成员的指针?为什么我们不能像我们为结构所做的那样去做?
请帮帮我。谢谢。
答案 0 :(得分:3)
你在这里做了两件完全不同的事情。
第一个是为一个特定对象创建一个普通的对象指针。这是指该对象,可用于访问其任何成员。
第二个创建指向成员的指针,它与对象指针非常不同。它引用类成员而不是特定对象,并且可以应用于任何对象以访问该成员。
在任何一种情况下,使用class
或struct
关键字定义类都无关紧要。这仅影响成员是默认为私人还是公共。
答案 1 :(得分: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;