gpt4 book ai didi

c++ - 类(class)范围

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:02 26 4
gpt4 key购买 nike

class a
{
private:
b *b_obj;
public:
void set(int);
};

a::a()
{
b_obj = new b;
}

a::set(int s)
{
b_obj->c = s;
}

class b
{
public:
int c;
};

这个代码有效吗?如果不是,我如何使 a 类的特定对象(比如 a_obj)的 b_obj 可以在另一个类 c 中修改...如果我在另一个类 d 中创建 a_obj ....我害怕 a_obj 超出范围c类。

希望你能理解我的问题。非常感谢您花时间阅读我的帖子

最佳答案

代码几乎有效。 class b 需要在 class a 中引用之前声明(或至少向前声明),您没有在 的定义中指定返回类型a::set,并且您还没有为 a'a 默认构造函数提供声明。这是修改后的代码以及测试工具:

class b
{
public:
int c;
};

class a
{
private:
b *b_obj;
public:
a();
void set(int);
};

a::a()
{
b_obj = new b;
}

void a::set(int s)
{
b_obj->c = s;
}

int main()
{
a my_a;
my_a.set(42);
}

现在,仅仅因为代码有效并不意味着它:

  1. 在默认构造 b 时不初始化 c
  2. 您使用指向动态分配的 b 的原始指针。尽可能使用自动变量。其中的原因是......
  3. 您永远不会删除您在a构造函数中新建b。这会导致内存泄漏。如果您一开始就避免使用动态分配,这就不是问题。

关于c++ - 类(class)范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7675601/

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