gpt4 book ai didi

c++ - 内存共享;遗产;基础和派生实例; C++

转载 作者:行者123 更新时间:2023-11-28 03:20:06 27 4
gpt4 key购买 nike

好吧,这个例子对于我试图理解的概念来说非常简单明了。我将向您展示代码:

class Base
{
protected:
string name;
public:
virtual string getName() const { return this->name; }
virtual void setName(string name) { this->name = name; }
....
}

class Derived : public Base
{
private:
double price;
....
}

main(int argc, char** argv)
{

Base* base = new Base("Base Class");
Derived* derived = new Derived(base, 453.21);
derived->setName("Name changed!");

cout << "Name of instance: " << base->getName() << endl;

// Desired effect
Output: 'Name changed!'
// Actual effect
Output: 'Base Class'
....
}

我的问题是这样的。我想引用已创建的基类实例创建派生类的实例,因此当我通过派生实例更改基类的任何成员变量时,我可以按照上面演示的方式看到先前创建的基实例的变化。

注意:我希望您能理解我的意思,因为我知道我的术语可能有点不对劲。请不要苛刻:)

注意:我不会展示/编写构造函数,因为我不确定最好的方法是什么,如果存在并且语法可能不正确的话。

最佳答案

这似乎说明了问题:

Base* base = new Base("Base Class");
Derived* derived = new Derived(base, 453.21);

因为通常没有必要单独构造 Base 类。您的派生类将已经隐式包含一个 Base 实例,您不必手动添加指向一个实例的指针并从构造函数中设置它。我不知道你的 ctor 长什么样,但它应该看起来像这样:

Derived(const std::string& name, double p) : Base(name), price( p ) {}

如果这足以让您自己修复它,那很好,否则请发布所有您示例的代码。而不是我上面引用的代码中的两行,它应该看起来更像:

Derived* derived = new Derived("Base Class", 453.21);

如果您发布Derived 的代码,这对我们来说应该是显而易见的,并且在您的具​​体示例中向您解释它会容易得多。

关于c++ - 内存共享;遗产;基础和派生实例; C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15708284/

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