Vij*_*jay 5 c++ pointers class
我正在处理我的一个应用问题.这里我遇到的问题是我需要使用类对象的指针调用一些函数.
但主要的问题是我没有一个类指针与我,而是我有一个成员变量值(让我们说它的值列表).在此之后我用下面的代码做了一个小测试.
using namespace std;
class Person {
public:
Person(string name, int age) {
this->name = name;
this->age = age;
}
string getName() {
return name;
}
int getAge() {
return age;
}
void Print()
{
printf("This address is %x\n",this);
printf("age adress is %x\n",&age);
}
private:
int age;
string name;
};
int main() {
cout << "Creating a person..." << endl;
Person *johnDoe=new Person("John Doe", 25);
cout << "Person's name: " << johnDoe->getName() << endl;
cout << "Person's age: " << johnDoe->getAge() << endl;
johnDoe->Print();
delete johnDoe;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行的输出是:
> ./a.out
Creating a person...
Person's name: John Doe
Person's age: 25
This address is 72918
age adress is 72918
Run Code Online (Sandbox Code Playgroud)
现在我怀疑是:
是否保证类成员变量的地址始终指向对象的地址?我是否可以使用此地址以防我需要使用指针调用其他核心api函数?
我用Google搜索时看到了这个?
(C1x§6.7.2.1.13:"指向结构对象的指针,适当转换,指向其初始成员......反之亦然.在结构对象中可能有未命名的填充,但不在其开头.")
即使在c ++和类的情况下,这是真的吗?
是否保证类成员变量的地址始终指向对象的地址?
不可以.在C++中,第一个成员之前可能有东西(特别是派生类和多态类).究竟有什么实现定义.
我是否可以使用此地址以防我需要使用指针调用其他核心api函数?
不,你不需要:只要你有权访问会员,你也可以访问this,不是吗?