C++ 指针和类

标签 c++ class pointers

在过去的 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/

相关文章:

c++ - 当您在 SDL2 中移动窗口时,如何解决程序卡住问题?

c++ - 在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?

php - 另一个类中的 MySQLi 连接

c - 对指向结构数组的指针执行算术运算时出错

c - 如何分配结构变量的内存

c++ - QTableView 的边框和文本 qss 设置

c++ - 允许派生类访问,但不允许覆盖

jQuery 双类 :visible selector

php - 扩展另一个的 PHP 类如何继承私有(private)函数?

c++11 - 通过 MPI 发送函数指针