大家好啊,這里是c++之旅第三彈,跟隨我的步伐來開始這一篇的學習吧!
如果有知識性錯誤,歡迎各位指正!!一起加油!!
創作不易,希望大家多多支持哦!
本篇文章的主要內容有:學習C語言面向過程,C++面向對象,以及類和對象的使用
一,面向過程:
1.c語言編程就是一個面向過程的編程。它遵循一個“從上往下”的過程式程序設計方式
2.用面向過程的方式解決問題的思路:
首先提出問題,分析問題的處理流程,將大問題分解成小問題,如果小問題比較復雜,那么就繼續的分解為更小的問題,然后解決這些一個一個的小問題來解決大問題,最后解決所有的問題(做好這一步,做下一步,直到做完所有)。
面向過程強調的是功能行為,以函數為最小單位,考慮怎么做
3.優缺點:
(1)優點:
、程序結構簡單
、把問題拆分進而實現簡單化
、使我們對整個邏輯結構清楚明了
(2)缺點:
、數據和操作往往是分離的
、數據不具有封裝性(由于數據是公開的,若有其他人因失誤改自己的數據的話,會影響自己的進展)
、多人協作開發時,不清楚別人的邏輯(導致只能一個一個按順序做,無法實現同時開展工作,不利于多人協作開發)
二,面向對象:
1.面向對象的概念:
面向對象是相對于面向過程而言的。面向對象的程序設計是面向過程的繼承和發展,程序對現實世界的抽象和描述,它認為現實世界是由對象組成的,無論大小,萬物皆對象。
對象在程序中抽象為兩個部分:① 描述對象的狀態或者屬性的數據(變量)② 描述對象的行為或者功能的方法(函數)
2.用面向對象的方式解決問題的思路:
(1)、根據問題的需要,選擇問題所對應現實世界中的實體
(2)、從實體中找到解決問題的相關的屬性和功能,這些屬性和功能就形成了概念中的類
(3)、把概念中的類用計算機語言進行描述,形成計算機世界中類的定義,也就是使用某種編程語言,實現該類
(4) 、通過該類創建對象來解決問題
3.面向對象的特點:
(1)、封裝性:將數據和行為結合在一起共同來表達一個數據(可以使各個對象模塊相對分離,更有利于代碼的維護和修改)
(2)、繼承:可以使代碼的擴展性好,有利于后期基于前期代碼的擴展功能,即支持代碼重用
(3)、多態:實現同一個東西在不同情況下實現不同操作
(4)、“高內聚、低耦合”:各模塊相對分離,可以通過上一層來進行各模塊間的連接或者用一個連接各模塊的模塊來實現模塊間的連接
三,類:
1.類的介紹:
類是一種用戶自定義數據類型,可以看作是 C 語言中結構體的升級版。類是由數據加功能構成的,也就是把變量和函數綁定在一起
2.定義方式:(和結構體類似)
class類名
{
訪問屬性:
類中成員,可以定義變量或函數
};
通過類定義的變量我們稱之為對象
3.如何進行類的定義:
(1)、考慮類的目的
(2)、考慮類的屬性和方法
(3)、考慮屬性和方法的訪問權限
(4) 、考慮類之間的關系和依賴
4.類的成員的訪問屬性:
(1)、訪問屬性關鍵字:
public:公有屬性
protected:保護屬性
private:私有屬性
(2)、屬性解釋:
公有屬性:類外和類中都可以被直接訪問,類外通過對象訪問
保護屬性:類中及派生類中可以被直接訪問 , 類外需要通過對象調用接口(實際上就是公有屬性的函數)訪問
私有屬性:只有在類中才能被訪問 , 類外需要通過對象調用接口訪問
類中從有屬性開始到下一個屬性開始(若無下一個訪問屬性,就是到結尾處)都是上一個屬性的控制范圍,其中屬性設置的個數是不限的,只不過不可以設置在成員函數里面
5.類中成員訪問:(以下示例是訪問公有屬性下的函數,所以不會報錯,如果是直接這樣訪問里面私有屬性的變量數據,則會報錯)
(1)、類對象通過“ .”訪問成員:
student stu;
stu.fun();
(2)、類指針通過“->”訪問成員:
student *p=new student;
p->fun();
6.c++中結構體和類的區別:
(1)、結構體的默認訪問屬性是公有,類是私有。
(2)、類中能寫的結構體里也能寫
(3)、結構體一般用于定義數據這樣的類型,比如矩陣之類的(里面一般不定義函數);而類則一般用于定義實體類型(有數據也有相應操作(函數))
四,實際運用時對類的使用:
1.一般將類定義在頭文件中,該頭文件中一般寫有類總體,類里面定義的變量以及函數的聲明,函數的定義寫在同名的源文件中
使用這種函數定義和聲明在不同文件中時記得要寫明類名(在函數名前),相當于命名空間類似的操作:
分文件操作舉例:
people.h頭文件中的內容:
#pragma onceclass CPeople{int x, y;public:void setPoint(int px, int py);int getX()//直接返回這種簡單函數就不必分文件編寫了{return x;}int getY()//直接返回這種簡單函數就不必分文件編寫了{return y;}};
同名源文件中的內容:
#include "people.h"//上面頭文件叫people.hvoid CPeople::setPoint(int px, int py){x = px;y = py;}
2.#pragma once:寫在頭文件開頭,用于表示該頭文件只引用一次(c++寫法),C語言中用#ifndef來只導一次
3.程序運行的過程:
使用了分文件編寫了,那么現在來了解一下程序在包含頭文件時的執行過程:
(1),先是預處理(宏替換和引用頭文件),引用頭文件的目的是包含頭文件中的內容,使頭文件和源文件一起進行編譯過程(頭文件都是伴隨著源文件來進行編譯的而不是獨立編譯)
(2),編譯:生成.obj二進制目標文件(是源文件生成的,頭文件不會生成,頭文件對應的定義函數的源文件也是可以生成的),因為.obj文件有大小,頭文件里面是類類型的定義和函數的聲明,是沒有大小的,所以不可以生成有內存的文件
(3),鏈接:將.obj文件分區塊進行拷貝,拷貝至一起,鏈接形成一個.exe可執行文件