[GeekBand][C++面向对象高级编程(下)]第五周作业

1. 题目

class Fruit{test
   int no;
   double weight;
   char key;
public:
   void print() {   }
   virtual void process(){   }
};
 
class Apple: public Fruit{
   int size;
   char type;
public:
   void save() {   }
   virtual void process(){   }
};

为上述类型 Fruit和Apple 添加 构造函数与 析构函数, 并在构造函数与析构函数中打印控制台信息,观察构造和析枸调用过程。然后为Apple类重载::operator new和 ::operator delete,在控制台打印信息,并观察调用结果。

2. 思考

2.1 构建operator newoperator new[]的基本要求

  • 返回值是void *
  • 第一个参数是size_t类型
  • 需要判断分配是否成功
inline
void* Apple::operator new(size_t size)
{
   if (Apple* p = (Apple*)malloc(size))   
   {
      cout << "Call Apple::operator new(). Size = " << size  << " ptr = " << p <<  endl;      
      return p;
   }
   else
      throw bad_alloc();   
}
inline
void* Apple::operator new[](size_t size)
{
   if (Apple* p = (Apple*)malloc(size))
   {
      cout << "Call Apple::operator new[]. Size = " << size << " ptr = " << p << endl;   
      return p;
   }
   else  
      throw bad_alloc();   
}

2.2 书写operator deleteoperator delete[] 要求

  • 返回值必须是void
  • 第一个参数必须是void*
inline
void Apple::operator delete(void* ptr, size_t size)
{
   cout << "Call Apple::operator delete. Size = " << size  << " ptr = " << ptr << endl;
}
inline
void Apple::operator delete[](void* ptr, size_t size)
{
   cout << "Call Apple::operator delete[]. Size = " << size  << " ptr = " << ptr << endl;  
}

2.3 C++ Primer - P823

3. 编译

g++ homework5.cpp -o homework5 -std=c++11

4. 结果分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容