前言
首先謝謝您能打開我的文章,希望您能看完,有不對或者可以改進的地方,留言在下面,再次感謝。自己把學習過程的一些方法和筆記,以及針對出現的各種錯誤解決方法共享在博客裏面。不斷地在提升自己,覺得這個平臺挺好的,可以記錄在學習過程中點點滴滴。雖然自己很菜,但我還是會一如既往的分享,努力變的優秀,會一直努力不斷地改進。希望對您有幫助。
文章目錄
一 面向過程:
用面向過程的方式解決問題的思路:提出問題,分析問題的處理流程,將大問題分解成小問題,如果小問題比較複雜,那麼就繼續的分解爲更小的問題,然後解決這些一個一個的小問題來解決大問題(調用函數),最後解決所有的問題。這個從問題出發,從上往下的解決過程,一步一步的解決問題,這種開發思路我們稱之爲面向過程的設計思想,因爲他主要是解決問題中的一個個的過程,而且它也比較符合哦我們解決問題的方法(做好這一步,做下一步,直到做完所有)。
1.1優點:
程序結構簡單
把大問題分成小問題,然後逐個解決小問題
“先做什麼,然後再做什麼”
1.2缺點:
在面向過程的時候,數據和操作往往是分離的,這樣如果是數據的結構有改變,那麼操作數據的函數就不得不重新寫,這個代價就比較大,並且數據一般都是不覺有封裝性的,很多變量都會暴露出來,這裏又可能會被篡改。
二 面向對象:
萬物皆對象
面向對象可以理解爲:現實世界是由對象組成的,無論大小。
對象由兩個部分組成:
1、描述對象的狀態或者屬性的數據(變量)
2、描述對象的行爲或者功能的方法(函數)
2.1 容易設計和實現
面向對象思想所應用的封裝、繼承、多態都是符合日常的思維習慣的,所以使用面向對象思想設計的程序結構清晰、更容易設計和實現。
面向對象思想的繼承和多態,強調了程序設計和代碼的重用,這在設計新程序的時候,可以最大限度地重用已有的設計和代碼,使得程序能夠滿足新的業務需求並具有較高的質量。
2.2容易擴展
利用面向對象思想的封裝、繼承和多態,可以設計出“高內聚、低耦合”的程序結構,可以讓程序更加靈活、更容易擴展,從而輕鬆應對軟件的擴展需求,降低維護成本。
高內聚,低耦合。通常用來判斷一個軟件設計的好壞。所謂的高內聚是指一個軟件模塊是由相關性很強的代碼組成,只負責某單一任務,也就是常說的“單一責任原則”。而低耦合指的是在一個完整的程序中,模塊與程序之間,儘可能保持相互獨立,即每個模塊儘可能獨立完成特定的子功能,模塊與模塊之間的接口,儘可能的少而簡單。
三 類的構成
類:封裝,繼承,多態
類:相同屬性和行爲的一組對象的統一描述
類中函數:行爲
數據成員:屬性
人類:男人,女人…(個體)
屬性:身高,三圍 (對象(個體)抽象出來的共有數據)
專業說法:狀態,特徵,組成成員
行爲: 喫飯,說話…
專業說法:修改屬性操作,訪問屬性,執行命令(動作)
對象:由屬性和操作組成的(類的具體化)
3.1類的定義
關鍵字 class
class 類名
{
public: //共有屬性
protected: //保護屬性
private: //私有屬性
} ;
默認的情況都是私有屬性
1,成員函數聲明 類中函數–成員函數
2,訪問成員(除了特殊成員外)—只能通過對象訪問
3, 權限問題
(1)public: :公有的,外部可以訪問
(2)protected: :通過成員函數訪問,外部不能訪問
(3)private: :通過成員函數訪問 外部不能訪問
4,創建對象
類名 對象名;
類名 *指針名=new 類名
通常做法public:成員函數protected:數據成員
3.2實例
1,計算圓的面積
#include <iostream>
using namespace std;
class Circle//圓類
{
int a;//默認私有
public://公有屬性:是別人可以在外面直接用的
int radius;
float pi = 3.14f;
void setX(int a)//對外提供的接口
{
print();
x = a;
}
int getX()
{
return x;
}
float CricleS()
{
return radius*radius*pi;
}
protected://保護屬性:自己可以用,別人用不了
int x;
private://私有屬性:自己可以用,別人也用不了
int y;
void print()
{
cout << "歡迎使用我給你的接口" << endl;
}
};
float fun(int radius, float pi)
{
return radius*radius*pi;
}
2,對象成員的訪問包括:
(1) 指針訪問形式
形式一:
對象指針變量名->公有成員
形式二:
(*對象指針變量名).公有成員
int main()
{
Circle*circle = new Circle;//new一個對象
circle->radius = 10;
cout << circle->CricleS() << endl;
delete circle;
circle = NULL;
cout << fun(10, 3.14f) << endl;
system("pause");
return 0;
}
(2)圓的訪問形式
對象名.數據成員名或 對象名.成員函數名(參數表)
其中“.”叫做對象選擇符,簡稱點運算符。
int main()
{
Circle circle;//對象實例化
circle.radius = 10;
cout << circle.CricleS() << endl;
circle.radius = 10;
circle.setX(20);
cout << circle.radius << endl;
cout << circle.getX() << endl;
system("pause");
return 0;
}
3.3類的實現
1、類:用來封裝數據的(數據(變量)+行爲(函數))
2、類型定義不佔數據內存
3、類定義分爲兩個部分:類說明和類實現兩個部分
class Cstu//類說明
{
int a;//類實現
private:
void seta(int a);//類實現:定義這個類類型裏面的行爲,是怎麼樣的操作 訪問類裏面的數據叫接口
void geta(){};
};
4,類中成員函數的定義叫類實現
(1)在類中定義
(2)在類外定義
void Cstu::seta(int a)//類外實現類內函數
{
this->a=a;
}
四 構造析構
4.1構造函數
C++在類的說明中可以包含一個或多個特殊的公有函數成員-構造函數
4.1.1特性:
1、函數名與類名相同
2、沒有函數返回值類型,也沒有返回值
3、一個新的對象被建立時,該對象的構造函數會自動地被調用,對這個對象進行初始化工作
4、新對象的建立包括兩種情況,CA a(對象說明語句);CA *pa = new CA(對象指針指向動態開闢的堆區無名對象);
5、如果一個類說明中沒有顯式的給出構造,系統將自動地給出一個缺省的(隱式)構造函數,<類名>(){};
6、如果說明中包括多個構造函數,一般會有不同的參數列表和函數體
4.1.2實例
class student
{
int a;
student* s;
public:
//無參構造 默認構造
student()//構造函數,在對象實例化的時候會調用給對象裏面的變量賦值
{
cout << "構造函數" << endl;
a = 100;
}
//構造函數可以重載,有參構造,帶參構造
student(int x)
{
cout << "帶參構造函數" << endl;
a = x;
}
};
4.2析構函數
4.2.1特性:
1、函數名與類名相同,在前面加上一個~ ~<類名>() {}
2、沒有函數返回值類型,也沒有返回值,也沒有參數
3、當對象出了他的作用域時,系統會自動調用析構函數
4、析構函數的作用一般是用於給對象裏面在堆區申請的內存釋放
5、一個類只有一個析構函數
6、如果一個類中沒有顯示的給出析構,析構將會自動給出一個(隱式)析構函數 ~<類名>() {}
4.2.2實例
~student()
{
cout << "a" << endl;
delete s;
}
4.3this指針
C++的保留字,它是一個指針,在任何一個類成員函數的運行過程,這個this指針總是指向調用者對象
*this 表示當前調用者對象
this->成員名((*this).成員名) 表示當前調用者的某個成員
return this; 來返回當前調用者對象的首地址
return *this; 來返回當前調用者對象
類名 * const this;
指向類的對象 ,當對象創建之後,成員函數調用時,this就被說明和創建
五 總結
1、類說明:定義一個類類型,告訴程序這個類型有什麼樣的數據,有什麼樣的行爲
2、類實現:定義這個類類型裏面的行爲,類裏面的函數就是接口爲數據參數的函數,
3、類名大寫的C開始,表示一個C++的類; 類說明 :class Cstu{int id;};
4、類的三種訪問屬性 public(共有) private(私有) protected(保護)
5、類默認是私有屬性,只有類中的成員函數才能使用類中的私有數據(private)
6、類中公有的行爲及數據可以在程序中被任何函數或語句所調用
7、類中的保護部分是不能在類外被調用的,只有類的子類可以調用
8、定義類時,當未指明成員是哪個屬性,默認是私有
9、類的定義時,結尾加;
10,類中通過構造和析構來創建和釋放對象
構造:內存從無到有 就可以藉助這個過程來完成對象的初始化
析構:內存從有到無 藉助這個過程來完成對象的清理(對對象裏面所申請的堆區內存進行釋放)
11,初始化參數列表Cstu(int x,int y):x(x),y(y){}