gpt4 book ai didi

C++ 指针和类

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

在过去的 45 分钟内试图解决这个问题,但无法弄清楚我应该做什么。这是问题。

class C; //forward declaration
class Cpointer {
public:

};

class C { //do not modify
int i;
public:
C(int _i=0) : i(_i) {}
Cpointer operator& () { return Cpointer(this); }
void Do() { std::cout << "i=" << i << std::endl; }
};


int main() {
Cpointer p (new C(100));
p->Do();
}

完成类 Cpointer 以便代码编译。确保没有内存泄漏。

据我了解,CPointer 类将 C 类作为构造函数的参数。当我尝试下面的代码时,我收到一个编译器错误提示CPointer 的 Do 函数中的“使用未定义类型 C”。

class Cpointer
{
C* mCptr;
public:
Cpointer(C* cptr) : mCptr(cptr){}
void Do()
{
//mCptr->Do();
}
};

最佳答案

我对发布解决方案感到有些不安,但既然你说这不是作业......这里是:

class Cpointer {
C* ptr;
public:
Cpointer(C* c) : ptr(c) { }
~Cpointer() { delete ptr; }
C* operator->() { return ptr; }
};

这里有三点:

  1. 获取 C* 指针并将其存储在临时提供的类指针类中的构造函数。
  2. p 超出 main 函数的范围时,用于删除堆分配对象 C 的析构函数。
  3. 重载 -> 运算符,以便 p->Do(); 将正确调用 C::Do 方法。

基本上,要求您实现的是标准 auto_ptr 类的部分功能。

关于C++ 指针和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802757/

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