c++ 類的預設八種函數

來源:互聯網
上載者:User

標籤:include   out   ios   end   std   pre   opera   賦值   ptr   

c++ 類的預設八種函數

 

  1 #include <iostream>  2 #include <assert.h>  3   4 class MyClass  5 {  6 public:  7     MyClass(const char * str = nullptr);  // 預設帶參建構函式  8     ~MyClass(void);  // 預設解構函式  9     MyClass(const MyClass &);  // 預設拷貝建構函式 10     MyClass & operator =(const MyClass &);  // 預設重載賦值運算子函數 11     MyClass * operator &();  // 預設重載取址運算子函數 12     MyClass const * operator &() const;  // 預設重載取址運算子const函數 13     MyClass(MyClass &&);  // 預設移動建構函式 14     MyClass & operator =(MyClass &&);  // 預設重載移動賦值操作符函數 15  16 private: 17     char *m_pData; 18 }; 19  20 // 預設帶參建構函式 21 MyClass::MyClass(const char * str) 22 { 23     if (!str) 24     { 25         m_pData = nullptr; 26     }  27     else 28     { 29         this->m_pData = new char[strlen(str) + 1]; 30         strcpy(this->m_pData, str); 31     } 32     std::cout << "預設帶參建構函式" << std::endl; 33 } 34  35  // 預設解構函式 36 MyClass::~MyClass(void) 37 { 38     if (this->m_pData) 39     { 40         delete[] this->m_pData; 41         this->m_pData = nullptr; 42     } 43     std::cout << "預設解構函式" << std::endl; 44 } 45  46 // 預設拷貝建構函式 47 MyClass::MyClass(const MyClass &m) 48 { 49     if (!m.m_pData) 50     { 51         this->m_pData = nullptr; 52     }  53     else 54     { 55         this->m_pData = new char[strlen(m.m_pData) + 1]; 56         strcpy(this->m_pData, m.m_pData); 57     } 58     std::cout << "預設拷貝建構函式" << std::endl; 59 } 60  61 // 預設重載賦值運算子函數 62 MyClass & MyClass::operator =(const MyClass &m) 63 { 64     if (this != &m) 65     { 66         delete[] this->m_pData; 67         if (!m.m_pData) 68         { 69             this->m_pData = nullptr; 70         }  71         else 72         { 73             this->m_pData = new char[strlen(m.m_pData) + 1]; 74             strcpy(this->m_pData, m.m_pData); 75         } 76     } 77     std::cout << "預設重載賦值運算子函數" << std::endl; 78     return *this; 79 } 80  81 // 預設重載取址運算子函數 82 MyClass * MyClass::operator &() 83 { 84     std::cout << "預設重載取址運算子函數" << std::endl; 85     return this; 86 } 87  88 // 預設重載取址運算子const函數 89 MyClass const * MyClass::operator &() const 90 { 91     std::cout << "預設重載取址運算子const函數" << std::endl; 92     return this; 93 } 94  95 // 預設移動建構函式 96 MyClass::MyClass(MyClass && m): 97     m_pData(std::move(m.m_pData)) 98 { 99     std::cout << "預設重載取址運算子const函數" << std::endl;100     m.m_pData = nullptr;101 }102 103 // 預設重載移動賦值操作符函數104 MyClass & MyClass::operator =(MyClass && m)105 {106     assert(this != &m);107 108     this->m_pData = nullptr;109     this->m_pData = std::move(m.m_pData);110     m.m_pData = nullptr;111 112     std::cout << "預設重載移動賦值操作符函數" << std::endl;113     return *this;114 }

 

c++ 類的預設八種函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.