[GeekBand][C++面向?qū)ο蟾呒?jí)編程(下)]第五周作業(yè)

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 添加 構(gòu)造函數(shù)與 析構(gòu)函數(shù), 并在構(gòu)造函數(shù)與析構(gòu)函數(shù)中打印控制臺(tái)信息,觀察構(gòu)造和析枸調(diào)用過程。然后為Apple類重載::operator new和 ::operator delete,在控制臺(tái)打印信息,并觀察調(diào)用結(jié)果。

2. 思考

2.1 構(gòu)建operator newoperator new[]的基本要求

  • 返回值是void *
  • 第一個(gè)參數(shù)是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
  • 第一個(gè)參數(shù)必須是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. 結(jié)果分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容