【C++第五課】---析構與構析上

來源:互聯網
上載者:User

在C++中,一般定義一個對象之後,我們最好是能夠將其初始化,使他有一個確定的初始狀態,這樣能避免很多不確定因素,那麼在C++中是如何做的呢?

這時候就需要引入建構函式的概念了。


一、所謂建構函式

C++中的類可以定義和類名相同的特殊成員函數,這種函數就叫做建構函式。

注意:定義建構函式的時候可以有參數的,但是定義的建構函式不能有返回值的

但是,但是在建構函式中是可以有return語句的。

舉個例子:

#include <iostream>using namespace std;class example{public:example(int m){x = y = m;}int print_value(void){cout<<"x = "<<x<<" y = "<<y<<endl;return 0;}private:int x;int y;};int main(int argc,char** argv){example exam1(1);example exam2 = 2;exam1.print_value();exam2.print_value();return 0;}


二、建構函式的調用

1.一般情況下C++編譯器會自動建構函式

2.特殊情況下需要手動調用建構函式

舉例如下:

#include <iostream>using namespace std;class example{public:example(int m){x = y = m;}int print_value(void){cout<<"x = "<<x<<" y = "<<y<<endl;return 0;}private:int x;int y;};int main(int argc,char** argv){example exam1(1);//自動調用example exam2 = 2;//自動調用example exam3 = example(3);//手動調用exam1.print_value();exam2.print_value();exam3.print_value();return 0;}


三、建構函式和成員函數都是可以重載的,重載規則相同。


四、兩個特殊的建構函式

1.無參數建構函式

當類中沒有定義建構函式時,,編譯器預設提供一個無參 編譯器預設提供一個無參
建構函式,,並且其函數體為空白。

2.拷貝建構函式

當類中沒有定義拷貝建構函式時,,編譯器預設提供一個 編譯器預設提供一個
拷貝建構函式,,簡單的進行成員變數的值複製。不進行空間的開闢


一個執行個體:數組類的建立

main.cpp

#include <iostream>#include "array.h"using namespace std;int main(int argc, char** argv){ARRAY array1(5);//建立對象,並且初始化對象為5個元素for(int i = 0;i < 5; i ++){array1.Set_Data(i,-i);  //給數組賦值}for(int i = 0; i < 5; i ++){cout<<"i = "<<array1.Get_Data(i)<<endl;//列印數組的值}Destroy();//釋放記憶體return 0;}

array.cpp

#include "array.h"ARRAY::ARRAY(int length){if(length < 0){length = 0;}m_length = length;m_space = new int[m_length];}ARRAY::ARRAY(const ARRAY& obj){m_length = obj.m_length;m_space = new int[m_length];for(int i = 0;i < m_length;i ++){m_space[i] = obj.m_space[i];}}int ARRAY::Get_Data(int index){return m_space[index];}void ARRAY::Set_Data(int index,int value){m_space[index] = value;}int ARRAY::Length(){return m_length;}void ARRAY::Destroy(){m_length = -1;delete[] m_space;}

array.h

#ifndef __ARRAY_H_#define __ARRAY_H_class ARRAY{public:ARRAY(int length);ARRAY(const ARRAY& obj);int Get_Data(int index);void Set_Data(int index,int value);int Length();void Destroy();private:int m_length;int* m_space;};#endif





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.