類與類的初始化

來源:互聯網
上載者:User

標籤:

物件導向(Object-Oriented):是一種按照人們認識客觀世界的思維方式,採用基於對象(實體)的概念建立抽象的模型,類比客觀世界分析、設計、實現軟體的方法。

類(Class):具有相同屬性、操作的抽象的集合。

類的成員:

類包括成員變數和成員函數,其具有3種屬性公有(public)、私人(private)和保護(protected)。

public:可以被該類的函數、子類的函數、友元函數訪問,也可以被該類的對象訪問。

private:只能被該類中的函數訪問,被友元函數訪問;不能被任何其他訪問,該類的對象也不能訪問。

protected:可以被該類的函數、子類的函數、友元函數訪問。不能被該類的對象訪問。

類的建立及初始化:

建立類時要對類進行聲明和定義。

建構函式(Constructors):是一種特殊的成員函數。主要用來在建立對象時初始化對象。建構函式唯一的文法限制是不能指定傳回型別。建構函式名與類名同名。建構函式包括預設建構函式、拷貝建構函式。

預設建構函式(Default Constructor):在類未提供顯式打的初始化值時,被用來建立對象的建構函式,預設建構函式無參數。若且唯若沒有定義任何建構函式時,編譯器才會提供預設的建構函式,為類定義了建構函式(有參數)後,則必須為它提供顯式預設的建構函式。給已有的建構函式的所有參數提供預設值。

 1 #ifndef _Number_H_ 2 #define _Number_H_ 3  4 class Number 5 { 6 public: 7     Number(int a = 0, double b = 0.0); 8     //Number(int, double); 9     //Number();10     void ShowNumber();11 private:12     int Number_a;13     double Number_b;14 };15 16 #endif
Number.h
 1 #include <stdio.h> 2 #include "Number.h" 3  4 Number::Number(int a, double b) 5 { 6     Number_a = a; 7     Number_b = b; 8 } 9 10 //Number::Number()11 //{12 //    Number_a = 0;13 //    Number_b = 0.0;14 //}15 16 void Number::ShowNumber()17 {18     printf("a = %-10d, b = %lf\n", Number_a, Number_b);19 }
Number.cpp
 1 #include "Number.h" 2  3 int main() 4 { 5     Number a(1, 1.1); 6     Number b; 7     a.ShowNumber(); 8     b.ShowNumber(); 9     return 0;10 }
main.cpp
0 errors, 0 warningsa = 1         , b = 1.100000a = 0         , b = 0.000000
Result

  通過重載來定義另一個建構函式。

 1 #ifndef _Number_H_ 2 #define _Number_H_ 3  4 class Number 5 { 6 public: 7     //Number(int a = 0, double b = 0.0); 8     Number(int, double); 9     Number();10     void ShowNumber();11 private:12     int Number_a;13     double Number_b;14 };15 16 #endif
Number.h
 1 #include <stdio.h> 2 #include "Number.h" 3  4 Number::Number(int a, double b) 5 { 6     Number_a = a; 7     Number_b = b; 8 } 9 10 Number::Number()11 {12     Number_a = 0;13     Number_b = 0.0;14 }15 16 void Number::ShowNumber()17 {18     printf("a = %-10d, b = %lf\n", Number_a, Number_b);19 }
Number.cpp
 1 #include "Number.h" 2  3 int main() 4 { 5     Number a(1, 1.1); 6     Number b; 7     a.ShowNumber(); 8     b.ShowNumber(); 9     return 0;10 }
main.cpp
0 errors, 0 warnings2 a = 1         , b = 1.1000003 a = 0         , b = 0.000000
Result

 拷貝建構函式(Copy Constructor):是一種特殊的建構函式,它由編譯器調用來完成一些基於同一類的其他對象的構建及初始化。

  拷貝建構函式是由普通建構函式和賦值操作符共同實現的。

  如果在類中沒有顯式的聲明一個拷貝建構函式,那麼,編譯器會自動產生一個來進行對象之間非static成員的位拷貝。這個隱含的拷貝建構函式簡單的關聯了所有的類成員。

在C++中,下面三種對象需要調用拷貝建構函式:

  1. 一個對象作為函數參數,以值傳遞的方式傳入函數體。
  2. 一個對象作為函數傳回值,以值傳遞的方式從函數返回。
  3. 一個對象用於給另一個對象進行初始化。
 1 #ifndef _Number_H_ 2 #define _Number_H_ 3  4 class Number 5 { 6 public: 7     //Number(int a = 0, double b = 0.0); 8     Number(int, double); 9     Number();10     Number(const Number &);11     void ShowNumber();12 private:13     int Number_a;14     double Number_b;15 };16 17 #endif
Number.h
 1 #include <stdio.h> 2 #include "Number.h" 3  4 Number::Number(int a, double b) 5 { 6     Number_a = a; 7     Number_b = b; 8 } 9 10 Number::Number()11 {12     Number_a = 0;13     Number_b = 0.0;14 }15 16 Number::Number(const Number & num)17 {18     Number_a = num.Number_a;19     Number_b = num.Number_b;20 }21 22 void Number::ShowNumber()23 {24     printf("a = %-10d, b = %lf\n", Number_a, Number_b);25 }
Number.cpp
 1 #include "Number.h" 2  3 int main() 4 { 5     Number a(1, 1.1); 6     Number b(a); 7     a.ShowNumber(); 8     b.ShowNumber(); 9     return 0;10 }
main.cpp
0 errors, 0 warningsa = 1         , b = 1.100000a = 1         , b = 1.100000
Result

解構函式(Destructor):也是一種特殊的成員函數,它的作用與建構函式相反,當對象脫離其範圍時(例如對象所在的函數已經調用完畢),系統自動執行解構函式。

  解構函式名也應與類名相同,只是在函數名前加一個取反符"~",以區別於建構函式。

類與類的初始化

聯繫我們

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