C++萬物皆對象

前言

首先謝謝您能打開我的文章,希望您能看完,有不對或者可以改進的地方,留言在下面,再次感謝。自己把學習過程的一些方法和筆記,以及針對出現的各種錯誤解決方法共享在博客裏面。不斷地在提升自己,覺得這個平臺挺好的,可以記錄在學習過程中點點滴滴。雖然自己很菜,但我還是會一如既往的分享,努力變的優秀,會一直努力不斷地改進。希望對您有幫助。

一 面向過程:

用面向過程的方式解決問題的思路:提出問題,分析問題的處理流程,將大問題分解成小問題,如果小問題比較複雜,那麼就繼續的分解爲更小的問題,然後解決這些一個一個的小問題來解決大問題(調用函數),最後解決所有的問題。這個從問題出發,從上往下的解決過程,一步一步的解決問題,這種開發思路我們稱之爲面向過程的設計思想,因爲他主要是解決問題中的一個個的過程,而且它也比較符合哦我們解決問題的方法(做好這一步,做下一步,直到做完所有)。

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){}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章