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