C++學習筆記——類和對象(今天是521,你有對象了嗎)(一)


這一章開始進入真正OOP的世界,剛剛接到期末考試通知心裏很慌,發現自己好多東西還沒學會,趁晚上睡不着開始複習,希望這次考試考好(然後可以去看小鬼的演唱會)

  • 回顧:
    程序=算法+數據結構
    程序=函數+數據
    爲什麼控制和數據要分離,如果我們將其統一呢?

對象:對現實生活中對象的抽象,具有屬性和行爲,我們對具有相似屬性和行爲的對象進行抽象就形成了類,對象是類的實例
類:對一類對象的封裝,提供對外接口,隱藏內部細節,創建類時需要使用構造函數,刪除類時需要用到析構函數,還可以將類進行組合

面向對象程序

過程性編程和麪向對象編程

  • 什麼是過程?什麼是面向對象?
    如果我們要設計程序統計每個達琳的信息,當我是面向過程設計,我就會先考慮如何聯繫到每個鬼姐姐,如何獲取這些數據,以什麼樣的形式展示,然後再考慮需要有哪些數據,應該如何存放。面向對象就是考慮到每個鬼姐姐應該有哪些數據,如何使用,再考慮如何設計界面,如何獲取的問題,面向對象更符合我們解決問題的常規思路
    😈
    抽象,封裝,繼承,多態
  • 抽象:具體問題→公共性質
    找出本質特徵(類似於語文中的借代)然後針對這一特徵找出解決方法
  1. 代碼抽象:功能和行爲
  2. 數據抽象:屬性和狀態的抽象
    如何實現抽象呢?類的聲明!
  3. 什麼是類型?
    在現實生活中我們會對事物進行分類,計算機中同樣如此,數據的分類(根據存儲方式,計算特點等)默認了對數據操作方法
  4. 類:對同一類對象的共同屬性和行爲進行概括,形成類,包括類的聲明和類方法定義,類聲明是藍圖,方法定義了細節
    舉例:鐘錶
    數據抽象 int hour,int minute,int second
    代碼抽象 setTime(),showTime()
class Clock {
public:
	void setTime(int newH, int newM, int newS);
	void showTime();
private:
	int hour, minute, second;
};

補充:什麼是接口?黑盒子內部我們不知道,我們只能通過外部的窗口直接使用他(如通過調用公共的函數等等)

  • 封裝:將抽象的數據和代碼形成一個類
    目的:增強安全性,使用者不必瞭解具體的細節,只需要通過訪問接口和特定的權限使用類的成員,通過類聲明中的{}實現
class Clock {
public://訪問權限
	void setTime(int newH, int newM, int newS);//對外訪問接口
	void showTime();
private://訪問權限
	int hour, minute, second;
};

數據和行爲的聲明都叫做類的成員,通過修改類的成員,改變外部可訪問性,增強數據安全和類之間的相互關係

  • 繼承 在已有類的基礎上進行擴展,有利於代碼重用
  • 多態:同一名稱,不同的功能實現
    類似於函數重載

類和對象

概述:同類型對象的集合,通過具體的對象實現類的功能。
起初使用函數抽象時,只是對行爲進行了抽象,類對行爲和數據都進行了抽象,抽象層次更高,更適合大型軟件開發
型和值的概念:型對值進行了限制,限制了運算和數據類型,說明數據類型包含了數據的屬性和對數據的操作
自定義類型實際上就是一種類

  • 類的實例化

  • 類的定義
class 類名稱
{
public:(外部接口)
private:
protected:

注意:只需要聲明函數原型,函數體在類外定義
類定義一般分爲說明部分和實現部分(實現部分是函數的定義)

  • 類成員的訪問控制
    ①公有成員:任何外部成員都可訪問,是對外部的接口
    ②private:對外屏蔽,只允許本類中函數訪問,類外部函數不能訪問(可以通過某種方法進行授權,即可訪問),如果緊跟class聲明後面定義屬性和行爲,則默認爲private(一般內部數據都被定義爲私有類)
    ③protected(繼承部分介紹)
    成員數據賦值
    類內初始值
    private: int hour=0, minute=0, second=0;
    創建對象時,如果沒有構造函數,就會按照類內初始值的定義對對象相關的值進行賦值
  • 類的成員函數:對類對象行爲的描述
    1 成員函數的實現
    原型聲明在類體中,函數定義在類之外,要指明類的名稱,也可以直接在類中給出,形成內聯函數。
void Class::setTime(){}

(需要用類名來限制函數)
2 目的對象:myClock::setTime();
3 也可以在類內給出函數體,形成內聯成員函數(簡單的函數)
4 允許重載函數和帶默認值的函數

#include<iostream>
using namespace std;
class Clock {
public:
	void setTime(int newH = 0, int newM = 0, int newS = 0);
	void showTime();
private:
	int hour, minute, second;//該類的成員函數都可使用這些數據
};
void Clock::setTime(int newH, int newM, int newS) {
	hour = newH;
	minute = newM;
	second = newS;
}
void Clock::showTime() {
	cout << hour << ":" << minute << ":" << second;
}
int main() {
	Clock myClock;
	myClock.setTime(12, 36, 2);
	myClock.showTime();
	return 0;
}

5 內聯函數
隱式定義和顯式定義

對象:對現實對象的模擬

  • 對象的定義類名 對象名
Clock myClock;

2.類的成員間可以互相訪問
3.類外訪問類的成員,需要通過對象訪問
對象名.成員名(僅限於public)
4.a=b;實現對象b的屬性全部賦值給a
一般來說會選擇把數據類型的變量改爲private型,一般定義一個getNum的函數去訪問變量。
不要讓類太複雜,模塊化設計纔是宗旨

這篇先寫到這,隨後根據cpp增加內容

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