
四個(gè)主要特點(diǎn):抽象、封裝、繼承、多態(tài)
C++ 接口(抽象類(lèi)) 描述了類(lèi)的行為和功能,而不需要完成類(lèi)的特定實(shí)現(xiàn)。封裝是面向?qū)ο缶幊讨械陌褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個(gè)概念,這樣能避免受到外界的干擾和誤用。類(lèi)和對(duì)象體現(xiàn)了抽象和封裝。
繼承允許我們依據(jù)另一個(gè)類(lèi)來(lái)定義一個(gè)類(lèi),這使得創(chuàng)建和維護(hù)一個(gè)應(yīng)用程序變得更容易。這樣做,也達(dá)到了重用代碼功能和提高執(zhí)行效率的效果。從一個(gè)父類(lèi)派生出多個(gè)子類(lèi),可以使子類(lèi)之間有不同的行為,這種行為稱(chēng)之為多態(tài)。沒(méi)有繼承就沒(méi)有多態(tài),繼承是多態(tài)的前提。
c++訪問(wèn)控制符特點(diǎn)訪問(wèn)控制符: public、private 和 protected
public能被本類(lèi)的成員函數(shù)、友元函數(shù)、本類(lèi)的對(duì)象、其派生類(lèi)的成員函數(shù)調(diào)用。
protected能被本類(lèi)的成員函數(shù)、友元函數(shù)、其派生類(lèi)的成員函數(shù)調(diào)用。
private能被本類(lèi)的成員函數(shù)、友元函數(shù)調(diào)用。
內(nèi)存區(qū)一個(gè)由C/C++編譯的程序占用的內(nèi)存分為以下五個(gè)部分:
棧區(qū)(Stack) : 存放函數(shù)的參數(shù)值,局部變量等。由編譯器自動(dòng)分配和釋放。
堆區(qū)(Heap) :動(dòng)態(tài)內(nèi)存分配得到的內(nèi)存空間就是位于堆區(qū)。由程序員主動(dòng)分配和釋放,若程序員未主動(dòng)釋放,則程序結(jié)束后自動(dòng)釋放。
全局/靜態(tài)存儲(chǔ)區(qū):存放全局變量和靜態(tài)變量,程序結(jié)束后自動(dòng)釋放
常量和代碼區(qū):存放字符串常量,程序結(jié)束后自動(dòng)釋放
代碼區(qū):存放函數(shù)體的二進(jìn)制代碼
c++新增了new 和 delete字段,new 用來(lái)動(dòng)態(tài)分配內(nèi)存,delete 用來(lái)釋放內(nèi)存。
它們可以使用C++的一些新特性,最明顯的是可以自動(dòng)調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)。
最好不要和C語(yǔ)言中 malloc()、free() 一起混用。
在這里,我們使用指針為變量動(dòng)態(tài)分配內(nèi)存。
int* pointVar;
pointVar = new int;
*pointVar = 45;
cout<< *pointVar;
delete pointVar;3、兩題程序填空
4、一道程序大題
考點(diǎn)
1.c++相對(duì)于c的改進(jìn)
聯(lián)系C++是C的超集,兼容大部分C的語(yǔ)法的結(jié)構(gòu)。
區(qū)別| C | C++ | |
|---|---|---|
| 思想 | 面向過(guò)程 | 面向?qū)ο?/td> |
| 動(dòng)態(tài)管理內(nèi)存 | malloc/free函數(shù) | new/delete關(guān)鍵字 |
| 數(shù)據(jù)類(lèi)型 | struct | class |
| 默認(rèn)訪問(wèn)修飾符 | public | private |
| 變量的默認(rèn)鏈接屬性 | 外鏈接 | 內(nèi)鏈接 |
| 數(shù)組 | 靜態(tài)數(shù)組 | 動(dòng)態(tài)數(shù)組 |
| 其他 | 重載、引用 |
四個(gè)主要特點(diǎn):抽象、封裝、繼承、多態(tài)
抽象C++ 接口(抽象類(lèi)) 接口描述了類(lèi)的行為和功能,而不需要完成類(lèi)的特定實(shí)現(xiàn)。
類(lèi)體現(xiàn)了抽象。
封裝是面向?qū)ο缶幊讨械陌褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個(gè)概念,這樣能避免受到外界的干擾和誤用。
對(duì)象體現(xiàn)了封裝。
繼承允許我們依據(jù)另一個(gè)類(lèi)來(lái)定義一個(gè)類(lèi),這使得創(chuàng)建和維護(hù)一個(gè)應(yīng)用程序變得更容易。這樣做,也達(dá)到了重用代碼功能和提高執(zhí)行效率的效果。
多態(tài)從一個(gè)父類(lèi)派生出多個(gè)子類(lèi),可以使子類(lèi)之間有不同的行為,這種行為稱(chēng)之為多態(tài)。
沒(méi)有繼承就沒(méi)有多態(tài),繼承是多態(tài)的前提。
形參是實(shí)參的拷貝,改變形參的值并不會(huì)影響外部實(shí)參的值。從被調(diào)用函數(shù)的角度來(lái)說(shuō),值傳遞是單向的(實(shí)參->形參),參數(shù)的值只能傳入,不能傳出。當(dāng)函數(shù)內(nèi)部需要修改參數(shù),并且不希望這個(gè)改變影響調(diào)用者時(shí),采用值傳遞。
指針傳遞形參為指向?qū)崊⒌刂返闹羔槪?dāng)對(duì)形參的指向操作時(shí),就相當(dāng)于對(duì)實(shí)參本身進(jìn)行的操作
4.類(lèi)的析構(gòu)函數(shù)、成員函數(shù)、構(gòu)造函數(shù)區(qū)別 成員函數(shù)類(lèi)的成員函數(shù)是指那些把定義和原型寫(xiě)在類(lèi)定義內(nèi)部的函數(shù),就像類(lèi)定義中的其他變量一樣。類(lèi)成員函數(shù)是類(lèi)的一個(gè)成員,它可以操作類(lèi)的任意對(duì)象,可以訪問(wèn)對(duì)象中的所有成員。
class Line
{
public:
double length;
double getVolume(void)
{
return length;
}
};構(gòu)造函數(shù)類(lèi)的構(gòu)造函數(shù)是類(lèi)的一種特殊的成員函數(shù),它會(huì)在每次創(chuàng)建類(lèi)的新對(duì)象時(shí)執(zhí)行。
不會(huì)返回任何類(lèi)型,也不會(huì)返回 void。
先基類(lèi)調(diào)用,再到派生類(lèi)。
// 成員函數(shù)定義,包括構(gòu)造函數(shù)
Line::Line(void)
{
cout<< "Object is being created"<< endl;
}析構(gòu)函數(shù)類(lèi)的析構(gòu)函數(shù)是類(lèi)的一種特殊的成員函數(shù),它會(huì)在每次刪除所創(chuàng)建的對(duì)象時(shí)執(zhí)行。
析構(gòu)函數(shù)的名稱(chēng)與類(lèi)的名稱(chēng)是完全相同的,只是在前面加了個(gè)波浪號(hào)(~)作為前綴。
調(diào)用構(gòu)造函數(shù)的順序和調(diào)用析構(gòu)函數(shù)的順序相反,先派生類(lèi)調(diào)用,再基類(lèi)調(diào)用。
Line::~Line(void)
{
cout<< "Object is being deleted"<< endl;
}5.類(lèi)的定義類(lèi)(Class)是面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)現(xiàn)信息封裝的基礎(chǔ)。類(lèi)是一種用戶(hù)定義的引用數(shù)據(jù)類(lèi)型,也稱(chēng)類(lèi)類(lèi)型。每個(gè)類(lèi)包含數(shù)據(jù)說(shuō)明和一組操作數(shù)據(jù)或傳遞消息的函數(shù)。類(lèi)的實(shí)例稱(chēng)為對(duì)象。
class 類(lèi)名{
訪問(wèn)范圍說(shuō)明符:
成員變量
訪問(wèn)范圍說(shuō)明符:
成員函數(shù)聲明
...
};成員函數(shù)的實(shí)現(xiàn)可以位于類(lèi)的定義之外,格式如下:
返回值類(lèi)型 類(lèi)名:函數(shù)名()
{
函數(shù)體
}定義類(lèi)之后,就可以定義對(duì)象了。定義對(duì)象的基本方法如下:
類(lèi)名 對(duì)象名;例子:
#includeusing namespace std;
class CRectangle
{
public:
int w, h; //成員變量,寬和高
void init( int w_,int h_ ); //成員函數(shù),設(shè)置寬和高
int area(); //成員函數(shù), 求面積
}; //必須有分號(hào)
void CRectangle::init( int w_,int h_ )
{
w = w_; h = h_;
}
int CRectangle::area()
{
return w * h;
}
int main( )
{
int w,h;
cin >>w >>h;
r.init( w,h);
cout<< "It's area is "<< r.area()<< endl;
return 0;
} 6.繼承的概念和性質(zhì)概念:如果一個(gè)類(lèi)別B“繼承自”另一個(gè)類(lèi)別A,就把這個(gè)B稱(chēng)為“A的子類(lèi)”。
性質(zhì):繼承可以使得子類(lèi)具有父類(lèi)別的各種屬性和方法,而不需要再次編寫(xiě)相同的代碼。
在類(lèi)的繼承中,基類(lèi)成員的訪問(wèn)特性在派生類(lèi)中可以改變。
父類(lèi)類(lèi)型的子類(lèi)對(duì)象把子類(lèi)對(duì)象直接賦值給父類(lèi)對(duì)象(即父類(lèi)對(duì)象=子類(lèi)對(duì)象),子類(lèi)對(duì)象賦值給父類(lèi)對(duì)象,僅僅把繼承自父類(lèi)部分成員函數(shù)賦值給父類(lèi)對(duì)象,賦值完成后等號(hào)左邊依然是一個(gè)父類(lèi)對(duì)象,不能使用子類(lèi)擴(kuò)展的成員函數(shù)。
7.抽象類(lèi)的概念C++ 使用抽象類(lèi)來(lái)實(shí)現(xiàn)接口,接口描述了類(lèi)的行為和功能,而不需要完成類(lèi)的特定實(shí)現(xiàn)。
#includeusing namespace std;
// 基類(lèi)
class Shape
{
public:
// 提供接口框架的純虛函數(shù)
virtual int getArea() = 0;
protected:
int width;
int height;
};
// 派生類(lèi)
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
}; 8.派生類(lèi)的概念超類(lèi)/父類(lèi)/基類(lèi)=>子類(lèi)/派生類(lèi)
在構(gòu)建新類(lèi)的過(guò)程中,新建立的類(lèi)被稱(chēng)為“子類(lèi)”或者“派生類(lèi)”;而被繼承的包含相同特征的類(lèi)稱(chēng)為“父類(lèi)”或者“基類(lèi)”。 派生類(lèi)繼承了基類(lèi)的全部成員,并且可以增加基類(lèi)所沒(méi)有的數(shù)據(jù)成員和成員函數(shù),以滿(mǎn)足描述新對(duì)象的需求。
虛函數(shù),是指被virtual關(guān)鍵字修飾的成員函數(shù)。
該函數(shù)可以被實(shí)現(xiàn),同時(shí)允許用基類(lèi)的指針來(lái)調(diào)用子類(lèi)的該函數(shù)。
純虛函數(shù)是一種特殊的虛函數(shù),代表該函數(shù)沒(méi)有被實(shí)現(xiàn),它的實(shí)現(xiàn)留給派生類(lèi)去做。
定義純虛函數(shù)是為了實(shí)現(xiàn)一個(gè)接口,起到一個(gè)規(guī)范的作用。
class Shape {
public:
// pure virtual function
virtual int area() = 0;
};= 0告訴編譯器,函數(shù)沒(méi)有主體,上面的虛函數(shù)是純虛函數(shù)。
靜態(tài)多態(tài)就是在系統(tǒng)編譯期間就可以確定程序執(zhí)行到這里將要執(zhí)行哪個(gè)函數(shù)。
例如:函數(shù)的重載,對(duì)象名.操作符,執(zhí)行成員函數(shù)等。
動(dòng)態(tài)多態(tài)利用虛函數(shù)實(shí)現(xiàn)了運(yùn)行時(shí)的多態(tài)。
基類(lèi)定義虛函數(shù),在子類(lèi)中重寫(xiě)基類(lèi)函數(shù),再定義一個(gè)指向基類(lèi)對(duì)象的指針,然后使該指針指向由該基類(lèi)派生的子類(lèi)對(duì)象,再然后用這個(gè)指針來(lái)調(diào)用改虛函數(shù),就能實(shí)現(xiàn)動(dòng)態(tài)多態(tài)。
多重繼承指的是一個(gè)類(lèi)可以同時(shí)繼承多個(gè)類(lèi)
class BaseC: public BaseA, public BaseB{
...
};虛繼承為了解決多繼承時(shí)的命名沖突和冗余數(shù)據(jù)問(wèn)題,C++ 提出了虛繼承,使得在派生類(lèi)中只保留一份間接基類(lèi)的成員。
在繼承方式前面加上 virtual 關(guān)鍵字就是虛繼承。
最常見(jiàn)的場(chǎng)景就是菱形繼承:
//間接基類(lèi)A
class A{};
//直接基類(lèi)B
class B: virtual public A{};
//直接基類(lèi)C
class C: virtual public A{};
//派生類(lèi)D
class D: public B, public C{};虛繼承的構(gòu)造函數(shù)在普通繼承中,派生類(lèi)構(gòu)造函數(shù)中只能調(diào)用直接基類(lèi)的構(gòu)造函數(shù),不能調(diào)用間接基類(lèi)的。
在虛繼承中,對(duì)最終的派生類(lèi)來(lái)說(shuō),虛基類(lèi)是間接基類(lèi),最終派生類(lèi)的構(gòu)造函數(shù)必須要調(diào)用虛基類(lèi)的構(gòu)造函數(shù)。
11.數(shù)組定義以及在內(nèi)存中的分配數(shù)組是在內(nèi)存中連續(xù)存儲(chǔ)的具有相同類(lèi)型的一組數(shù)據(jù)的集合。元素可通過(guò)數(shù)組索引訪問(wèn), 最低地址對(duì)應(yīng)于第一個(gè)元素,最高地址對(duì)應(yīng)于最后一個(gè)元素。
靜態(tài)數(shù)組名用sizeof可以知道數(shù)組實(shí)際所占的內(nèi)存大小,而指向數(shù)組的指針占用空間即為普通指針的大小。當(dāng)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí),該數(shù)組自動(dòng)退化為同類(lèi)型的指針。
靜態(tài)初始化:給出初始化值,由系統(tǒng)決定長(zhǎng)度。
char ch[]="hello";動(dòng)態(tài)數(shù)組動(dòng)態(tài)初始化:只指定長(zhǎng)度,由系統(tǒng)給出初始化值;
int* Dynamic_Arr3 = new int[size](); //默認(rèn)的初始化;分配一個(gè)動(dòng)態(tài)數(shù)組,返回一個(gè)T類(lèi)型的指針,指針指向的是數(shù)組的第一個(gè)元素。
指針導(dǎo)致了動(dòng)態(tài)數(shù)組中size可以取0,即返回一個(gè)空指針。分配一個(gè)空動(dòng)態(tài)數(shù)組是合法的。
我們可以使用 static 關(guān)鍵字來(lái)把類(lèi)成員定義為靜態(tài)的。當(dāng)我們聲明類(lèi)的成員為靜態(tài)時(shí),這意味著無(wú)論創(chuàng)建多少個(gè)類(lèi)的對(duì)象,靜態(tài)成員都只有一個(gè)副本。
13.動(dòng)態(tài)鏈接庫(kù)庫(kù)是寫(xiě)好的現(xiàn)有的,成熟的,可以復(fù)用的代碼。
靜態(tài)庫(kù)與匯編生成的目標(biāo)文件一起鏈接為可執(zhí)行文件。
靜態(tài)庫(kù)的兩個(gè)問(wèn)題:空間浪費(fèi),更新麻煩。
動(dòng)態(tài)庫(kù)在程序編譯時(shí)并不會(huì)被連接到目標(biāo)代碼中,而是在程序運(yùn)行是才被載入。不同的應(yīng)用程序如果調(diào)用相同的庫(kù),那么在內(nèi)存里只需要有一份該共享庫(kù)的實(shí)例,規(guī)避了空間浪費(fèi)問(wèn)題。
動(dòng)態(tài)庫(kù)在程序運(yùn)行時(shí)才被載入,也解決了靜態(tài)庫(kù)對(duì)程序的更新、部署和發(fā)布頁(yè)會(huì)帶來(lái)麻煩。用戶(hù)只需要更新動(dòng)態(tài)庫(kù)即可,增量更新。
所有的 C++ 程序都有以下兩個(gè)基本要素:
封裝是面向?qū)ο缶幊讨械陌褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個(gè)概念,這樣能避免受到外界的干擾和誤用,從而確保了安全。
數(shù)據(jù)封裝是一種把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)捆綁在一起的機(jī)制,數(shù)據(jù)抽象是一種僅向用戶(hù)暴露接口而把具體的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái)的機(jī)制。
指針是一個(gè)變量,其值為另一個(gè)變量的地址,即,內(nèi)存位置的直接地址。
使用指針時(shí)會(huì)頻繁進(jìn)行以下幾個(gè)操作:定義一個(gè)指針變量、把變量地址賦值給指針、訪問(wèn)指針變量中可用地址的值。
c
#includec++
#includeusing namespace std; iostream負(fù)責(zé)輸入/輸出流
后綴為.h的頭文件c++標(biāo)準(zhǔn)已經(jīng)明確提出不支持了,早些的實(shí)現(xiàn)將標(biāo)準(zhǔn)庫(kù)功能定義在全局空間里,聲明在帶.h后綴的頭文件里,c++標(biāo)準(zhǔn)為了和C區(qū)別開(kāi),也為了正確使用命名空間,規(guī)定頭文件不使用后綴.h。
因此,當(dāng)使用
所謂namespace,是指標(biāo)識(shí)符的各種可見(jiàn)范圍。C++標(biāo)準(zhǔn)程序庫(kù)中的所有標(biāo)識(shí)符都被定義于一個(gè)名為std的namespace中。
當(dāng)使用< iostream >的時(shí)候,該頭文件沒(méi)有定義全局命名空間,必須使用namespace std;這樣才能正確使用cout。
鏈接屬性(linkage)分為三種——外部(external)、內(nèi)部(internal)、無(wú)(none)
C語(yǔ)言:
對(duì)于external屬性的標(biāo)識(shí)符,不同文件中出現(xiàn)的多個(gè)同名稱(chēng)標(biāo)識(shí)符指向同一個(gè)實(shí)體。
用extern關(guān)鍵字在聲明中指定以引用其他文件中定義的相同標(biāo)識(shí)符。
對(duì)于internal屬性的標(biāo)識(shí)符,僅在當(dāng)前文件內(nèi)該標(biāo)識(shí)符指向同一個(gè)實(shí)體。
對(duì)默認(rèn)屬性為external的標(biāo)識(shí)符,用static關(guān)鍵字在聲明中指定讓標(biāo)識(shí)符變?yōu)閕nternal。
對(duì)于none屬性的標(biāo)識(shí)符,在每個(gè)聲明位置都是一個(gè)新的實(shí)體。C語(yǔ)言中,沒(méi)有對(duì)應(yīng)的關(guān)鍵字。
默認(rèn)的鏈接屬性
標(biāo)識(shí)符的默認(rèn)的鏈接屬性與其出現(xiàn)的位置有關(guān):
//文件A
int x=0; //默認(rèn)external
void print(void) {
printf("Hello World!\n");
return 0;
}
//文件B
int main(){
extern int x;
print();
return 0;
}C++:
const變量隱含的具有internal屬性
實(shí)參和形參在數(shù)量上、類(lèi)型上、順序上必須嚴(yán)格一致。
4、轉(zhuǎn)換構(gòu)造函數(shù)轉(zhuǎn)換構(gòu)造函數(shù)的作用是將一個(gè)其他類(lèi)型的數(shù)據(jù)轉(zhuǎn)換成一個(gè)類(lèi)的對(duì)象?
當(dāng)一個(gè)構(gòu)造函數(shù)只有一個(gè)參數(shù),而且該參數(shù)又不是本類(lèi)的const引用時(shí),這種構(gòu)造函數(shù)稱(chēng)為轉(zhuǎn)換構(gòu)造函數(shù)。
轉(zhuǎn)換構(gòu)造函數(shù)是對(duì)構(gòu)造函數(shù)的重載。
例如:
Complex(double r)
{
real=r;
imag=0;
} 5、雙冒號(hào)"::"的作用
1、作用域符:作用域符分為三種:
1)global scope(全局作用域符),用法(::name)
2)class scope(類(lèi)作用域符),用法(class::name)
3)namespace scope(命名空間作用域符),用法(namespace::name)
當(dāng)全局變量在局部函數(shù)中與其中某個(gè)變量重名,那么就可以用::來(lái)區(qū)分
aaa; //全局變量
voidsleep()
{
aaa; //局部變量
aaa(局部變量) = aaa(局部變量) *aaa(局部變量) ;
::aaa(全局變量) =::aaa(全局變量) *aaa(局部變量);
}3、作用域分解運(yùn)算符比如聲明了一個(gè)類(lèi)A,類(lèi)A里聲明了一個(gè)成員函數(shù)voidf(),但沒(méi)有在類(lèi)的聲明里給出f的定義,那么在類(lèi)外定義f時(shí),就要寫(xiě)成voidA::f(),表示這個(gè)f()函數(shù)是類(lèi)A的成員函數(shù)。例如
classA {};
classA::add()
{}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱(chēng):C++期末復(fù)習(xí)-創(chuàng)新互聯(lián)
文章URL:http://chinadenli.net/article6/dsjoig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、軟件開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)、網(wǎng)站導(dǎo)航、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷(xiāo)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容