前言:時間過的好快,轉眼一學期就過去了,期末考試也快到了,是以就複習一遍同時也将自己學習的感悟總結下來。前面幾章大多與C語言相似,就不總結了。
第三章——函數
參數傳遞
#include <iostream>
using namespace std;
void swap(int a,int b) {
int t=a;
b=t;
a=b;
}
int main()
{
int x=5,y=10;
cout<<"x= "<<x<<" y= "<<y<<endl;
swap(x,y);
cout<<"x= "<<x<<" y= "<<y<<endl;
return 0;
}
//輸出結果
x= 5 y= 10
x= 5 y= 10
通過這個例子,可以看出形參值的改變對實參是無影響的,如果是引用傳遞的話就另當别論了,看下面這個例子。

可以看出,如果使用引用參數的話是可以改變實參的值,但要注意:
- 聲明一個引用時,必須同時對它進行初始化,使它指向一個已經存在的對象
- 一旦一個引用被初始化後,就不能改為指向其他對象
内斂函數
對于内斂函數,我的了解是就相當于一個類中公有類型的成員函數,隻不過是放在了類外面,需要在函數傳回值類型前加上
inline
,而且内斂函數大多都是調用頻率很高,而且代碼是相對簡單的。
帶預設形參值的函數
通過這個代碼就會了解帶預設形參值的函數,但也有幾點要注意:
- 有預設值的形參必須在形參清單的最後,因為實參與形參是按照從左到右的順序建立關系的。
- 在相同的作用域中,不允許在同一個函數的多個聲明中對一個參數的預設值重複定義。
函數重載
說白了,就是同一個函數名,但又不同的功能,這就叫函數重載,也需注意:
- 函數重載不以形參名來區分函數
- 函數重載不以傳回值來區分函數
第四章——類與對象
類的定義:
class 類名稱
{
public:
外部接口
private:
私有成員
};
對象聲明:
類名 對象名;
對象通路資料成員:
對象名
.
資料成員名
對象調用函數成員:
.
函數成員名(參數表)
成員函數的實作:
傳回值類型 類名
::
函數體
}
例如:
void Clock::setTime(int newH,int newM,int newS) {
hour=newH;
minute=newM;
second=newS;
}
void Clock::showTime() {
cout<<huor<<":"<<minute<<":"<<seconde<<endl;
}
到這才算剛接觸到C++,這些便是C++通路成員函數或對象的一些方法。
構造函數
通過這個代碼,感覺構造函數有一般成員函數的特征,但構造函數有一些特殊的特征:構造函數的函數名與類名相同,而且沒有傳回值
複制構造函數
複制構造函數的一般方法
class 類名
public:
類名(形參名);//構造函數
類名(類名 &對象名);//複制構造函數
…
};
類名::類名(類名 &對象名);//複制構造函數的實作
#include <iostream>
using namespace std;
class point {
public:
point(int xx=0,int yy=0) {
x=xx;
y=yy;
}
point(point &p);
int getX() {return x;}
int getY() {return y;}
private:
int x,y;
};
//成員函數實作
point::point(point &p) {
x=p.x;
y=p.y;
cout<<"copy"<<endl;
}
//形參為point類對象的函數
void fun1(point p) {
cout<<p.getX()<<endl;
}
//傳回值為point類對象的函數
point fun2(){
point a(1,2);
return a;
}
int main()
{
point a(4,5);
point b=a;//情況一,用a初始化b.第一次調用複制構造函數
cout<<b.getX()<<endl;
fun1(b);//情況二,對象b作為fun1的實參。第二次調用複制構造函數
b=fun2();//情況三,函數傳回值是類對象,函數傳回時,調用複制構造函數
cout<<b.getX()<<endl;
return 0;
}
通過這個代碼來了解一下複制構造函數,複制構造函數擁有一般構造函數的所有特性,而它所不同的是形參是本類的對象的引用。作用是使用一個已經存在的對象(由複制構造函數的參數指定),去初始化同類的一個新對象。這個概念了解起來最好是通過代碼,這樣便于了解。
複制函數有三種情況可以被調用:
- 當用類的一個對象去初始化該類的另一個對象時。
- 如果函數的形參是類的對象,調用函數時,進行形參和實參的結合時。
- 如果函數的傳回值是類的對象,函數執行完成傳回調用者時。
析構函數
構造對象時,構造函數中配置設定了資源,動态申請了一些記憶體單元,在對象消失時需要釋放這些記憶體單元。而析構函數就用來完成對象被删除前的一些清理工作。析構函數是在對象的生産期即将結束的時刻被自動調用的。而且析構函數不接收任何參數。