国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中的三大函數和操作符重載(Boolan)

2020-01-26 14:14:56
字體:
來源:轉載
供稿:網友

C++中三大函數:

  • 析構函數
  • 復制構造函數
  • =操作符(copy assignment operator)

這三個特殊的成員函數如果程序員沒有實現,編譯器將提供默認的實現方式。

析構函數:

形如~foo_t(),函數名和構造函數相同,前面加~,如果對象是自由變量創建,析構函數將在脫離作用域時調用。如果對象是通過new操作符創建的,則通過delete操作符調用析構函數。

復制構造函數:

形如foo_t(const foo_t& foo),以下情況復制構造函數均會被調用:

  1. 當對象按值返回時候(returned by value)
  2. 調用按值傳參的函數(passed by value)
  3. 通過thrown拋出或caught捕獲的對象
  4. 對象處于()包圍的初始化列表中

=操作符:

重載=操作符,如foo_t& operator=(const foo_t& foo),對已有對象的賦值操作將調用該函數(未初始化的對象成員將調用復制構造函數)。

以下為代碼實例:

#include <cstring>#include <iostream>class foo_t { friend std::ostream &operator<<(std::ostream &os, foo_t const &foo) {  os << foo.data;  return os; } public: foo_t(void) : data(new char[14]) { std::strcpy(data, "Hello, World!"); } ~foo_t(void) { delete[] data; } foo_t(const foo_t& other); foo_t &operator=(const foo_t& other); private: char *data;};foo_t::foo_t(const foo_t& other) { std::cout << "call copy constructor!!!" << std::endl; this->data = new char[strlen(other.data) + 1]; strcpy(this->data, other.data);}foo_t& foo_t::operator=(const foo_t& other) { std::cout << "call the copy assignment operator!!!" << std::endl; if (this == &other)   return *this; this->data = new char[strlen(other.data) + 1]; strcpy(this->data, other.data); return *this;}int main() { foo_t foo; std::cout << foo << '/n'; foo_t t(foo); // foo_t t2 = t; foo_t t3; t3 = t; return 0;}

為了方便測試,可以分別在析構函數、拷貝構造、=重載處設置斷點,觀察程序執行流程。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德昌县| 邮箱| 汉中市| 长阳| 霸州市| 鄂伦春自治旗| 即墨市| 夏河县| 光泽县| 出国| 新乐市| 阜新市| 武定县| 广水市| 蒲江县| 建始县| 大化| 都昌县| 台中市| 老河口市| 霍城县| 休宁县| 高陵县| 千阳县| 长子县| 天祝| 中超| 西丰县| 宜城市| 襄汾县| 昭苏县| 元谋县| 襄樊市| 麦盖提县| 曲麻莱县| 遵义县| 扶风县| 阳春市| 巴南区| 云南省| 罗定市|