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

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

作者: readME_boy | 来源:发表于2017-08-17 08:55 被阅读0次

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. 结果分析

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/krkgrxtx.html