C (2)類與物件簡介(B)

2021-08-22 05:51:04 字數 4557 閱讀 3902

目錄

五、類的組合

六、結構體與聯合體

結構體聯合體

七、列舉類

列舉型別

列舉類八、uml簡介

九、一些細節

將類物件作為其他類的成員稱為組合,從已有的類派生出新類稱為繼承

1.建構函式設計

·原則:對本類中的基本型別成員資料以及物件成員均要初始化

·語法形式:    類名::類名(物件成員所需的形參,本類成員形參):物件1(引數),物件2(引數),……

2.初始化次序

成員(包括基本型別成員和物件成員)在類體中定義的次序

·成員物件構造函式呼叫順序:按物件成員的宣告順序,先宣告者先構造

·初始化列表中未出現的成員物件,呼叫預設建構函式(無形參的)初始化

3.前向引用宣告

只是事先引入識別符號,具體宣告在其他地方

·當使用前向引用宣告時,只能使用被宣告的符號,而不能涉及類的任何細節

·在給出完整的類的定義前,可以宣告類的引用或者物件的指標

class a;

class b ;

class a ;

舉例:

#include#includeusing namespace std;

int m = 1, n = 1;

class point

int gety()

private:

int x, y;

};class line

private:

point p1, p2; //point類的物件p1,p2

double len;

};point::point(int xx = 0, int yy = 0)

point::point(point &p)

line::line(point xp1, point xp2) : p1(xp1), p2(xp2)

line::line(line &l) : p1(l.p1), p2(l.p2)

int main()

結果:constructor point called 1

constructor point called 2

!!copy constructor point called 1

!!copy constructor point called 2

!!copy constructor point called 3

!!copy constructor point called 4

constructor line called

!!copy constructor point called 5

!!copy constructor point called 6

copy constructor line called

the length of the line is: 5

the length of the line2 is: 5

1.結構體是一種特殊形態的類

·與類的唯一區別:類的預設訪問許可權是 private,結構體的預設訪問許可權是 public

·存在的主要原因:與c語言保持相容

2.語法形式

struct  結構體名稱 ;

3.初始化

·乙個結構體的全部資料成員都是公有成員

·沒有使用者定義的建構函式

·沒有基類和虛函式

則結構體的變數可以用以下語法形式初始化:    型別名  變數名 = ;

舉例:

#include#includeusing namespace std;

struct student stu = ;

int main()

結果:num:97001

name:lin lin

***:f

age:19

1.說明

·成員共用同一組記憶體單元

·任何兩個成員不會同時有效

·所佔空間不僅取決於最寬成員,還跟所有成員有關,其大小必須滿足兩個條件:大小足夠容納最寬的成員;大小能被其包含的所有基本資料型別的大小所整除

2.語法形式

union  聯合體名稱 ;

舉例:

#includeusing namespace std;

union u1 ;

union u2 ;

int main()

enum lalala

//預設情況下, a = 0, b = 1, ……, g = 6

enum lalala

//b = 7, d = 2, f = 12, g = 13

2)說明

·列舉元素是常量,不能對其賦值,即不能寫賦值表示式:sun = 0;但列舉值可以賦給整型變數

·整數值不能直接賦給列舉變數;如若需要,應進行強制型別轉換 (當然,整數應在列舉型別的取值範圍之內)

·列舉元素有預設值,依次為:0,1,2,…

·可以在宣告時另行指定列舉元素的值

·列舉值可以進行關係運算

舉例:

#includeusing namespace std;

enum gameresult ;

int main()

} return 0;

}結果:

the game was played and we won!

the game was played and we lost!

the game was played but tie.

the game was cancelled.

1.語法形式

enum class 列舉型別名: 底層型別 ;

enum class type ;

enum class type: char ;

enum class category ;

2.優勢

·強作用域,其作用域限制在列舉類中,如:type::general    //使用type的列舉值general

·轉換限制,列舉類物件不可以與整型隱式地互相轉換

·可以指定底層型別,如:enum class type: char ;    //指定char型別

舉例:

//錯誤版

#includeusing namespace std;

enum class side ;

enum class thing ; //right不衝突

int main()

//正確版

#includeusing namespace std;

enum class enumeration1 ;

enum class enumeration2 : long ; // val2=100.000400 出錯

int main()

uml是一種統一建模語言,是以標準方式表示物件導向系統的圖形語言;在uml中,用uml類圖建模每個類

·類圖是乙個具有三個組成部分的矩形。最上面部分居中並加粗顯示類名;中間部分是類的屬性,對應於 c++ 中的資料成員;底部是類的行為,對應於 c++ 中的成員函式

·通過列出行為名和其後的括號建模行為

·通過在行為名後的括號中列出形參名和隨後的冒號以及該形參的型別來建模形參

·通過列出屬性名及其後的冒號和屬性型別,將資料成員表示為屬性

·通過在行為名後的括號後面放置乙個冒號以及該返回值型別表示行為值的返回值型別

·通過把雙尖括號括起來的constructor放在建構函式名前面區分建構函式與類,且習慣上把類的建構函式放在其他行為前面

·行為名前面的加號(+)表示某某函式是uml中的public行為(即 c++ 中的 public 成員函式)

·屬性名前面的減號(-)表示某某屬性是uml中的private屬性(即 c++ 中的 private 資料成員)

·建立乙個類的物件之前,必須告訴編譯器這個類有哪些資料成員和成員函式

·自定義的類名通常首字母大寫,建議類名中每個單詞也首字母大寫

·類的每個物件在記憶體中維護自己的屬性複製

·預設情況下,string的初始值是空字串

·建構函式通常宣告為public型別

·編譯器只建立乙份類的成員函式副本,並在類的所有物件間共享這份副本

·類的介面由類的public成員函式構成;將介面與實現分離即將成員函式放在類外定義

C 2 類與物件(上)

class classname 分號不能省略 一般情況下,將宣告放在.件中,類的定義放在,cpp檔案中class.h pragma once class family class.cpp define crt secure no warnings include class.h include in...

C 類與物件(2)

一.類的6個預設建構函式 建構函式 主要完成初始化工作 析構函式 主要完成清理工作 拷貝建構函式 使用同類物件初始化建立物件 賦值操作符過載 主要是把乙個物件賦值給另乙個物件 取位址及const取位址操作符過載 主要是普通物件和const物件取位址 二.建構函式 1.概念 建構函式是乙個特殊的成員函...

C 類與物件 2

1.類的6個預設成員函式如果乙個類中什麼成員都沒有,簡稱為空類。空類中什麼都沒有嗎?並不是的,任何乙個類在我們不寫的情況下,都會自動生成下面6個預設成員函式。建構函式 拷貝建構函式 析構函式 賦值運算子過載函式 取位址運算子過載函式 const修飾的取位址運算子過載 2.建構函式 2.1建構函式概念...