私はアプリケーションの問題の1つに取り組んでいます。ここで私が直面している問題は、クラス オブジェクトのポインターを使用して呼び出す必要がある関数がいくつかあることです。
しかし、主な問題は、クラスポインターを持っていないことです。代わりに、メンバー変数の値(値のリストとしましょう)があります。これに続いて、以下のコードで小さなテストを行いました。
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;
}
実行の coutput は次のとおりです。
> ./a.out
Creating a person...
Person's name: John Doe
Person's age: 25
This address is 72918
age adress is 72918
今、私の疑問は次のとおりです。
クラスメンバー変数のアドレスが常にオブジェクトのアドレスを指していることが保証されていますか? 他のコア API 関数を呼び出すためにポインターを使用する必要がある場合、このアドレスを使用できますか?
ググったらこれ見た?
(C1x §6.7.2.1.13: 「適切に変換された構造体オブジェクトへのポインターは、その最初のメンバーを指します...またその逆も同様です。構造体オブジェクトとして内部に名前のないパディングがある場合がありますが、その先頭にはありません。」)
これは、C ++とクラスの場合でも当てはまりますか?