gpt4 book ai didi

c++ - 我可以访问我的对象的 'base part' 就好像它是它自己的对象一样吗?

转载 作者:行者123 更新时间:2023-11-30 02:27:30 25 4
gpt4 key购买 nike

假设我有一个基类 A 和一个添加了一些额外成员的派生类 B。现在我想为类 B 设置一个 setter 函数,它直接访问它自己的成员,但使用临时 A 对象批量分配派生成员。下面是一些示例代码:

class A
{
public:
int x;
int y;
A(int arg1, int arg2)
: x(arg1), y(arg2) {}
};

class B : public A
{
public:
int z;
B(int arg1, int arg2, int arg3)
: A(arg1, arg2), z(arg3) {}
void setB(int arg1, int arg2, int arg3) {
/*something here*/ = A(arg1, arg2);
this->z = arg3;
}
};

//编辑我想我不清楚问题不是真的“我可以吗?”而是“我怎么能?”。更具体地说:我可以用什么代替 /*something here*/ 来使 setB() 实际上与以下内容相同:

void setB(int arg1, int arg2, int arg3) {
this->x = arg1;
this->y = arg2;
this->z = arg3; }

最佳答案

Can I access the 'base part' of my object as if it were an object of its own?

是的。它是父类的完整实例,存在于派生类实例中。

派生类的指针或引用可转换为父类的指针/引用。

非指针/引用,即派生类型的值也可以转换为父对象,但这会创建父子对象的拷贝,就像将任何其他值类型转换为另一个总是创建拷贝一样。

Now I'd like to have a setter function for class B that acceses it's own members directly but assigns the derived members in batch using a temporary A object.

只需将 this 或取消引用的引用转换为父类类型:

 (A&)*this = A(arg1, arg2); // or
*(A*)this = A(arg1, arg2);

关于c++ - 我可以访问我的对象的 'base part' 就好像它是它自己的对象一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41602168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com