1. 程式人生 > >C++:初識類和物件

C++:初識類和物件

類和物件

面向物件

面向物件程式設計:面向物件程式設計是一種程式設計範性,同時也是一種程式開發的方法。

物件:指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝在其中,以提高軟體的重要性,靈活性和擴充套件性。

c++不是純面嚮物件語言,而是基於面向物件的語言,因為包含c的部分,c是面向過程。

面向物件的三大特性:

  • 繼承
  • 多型
  • 封裝

定義一個類:

class Person
{
public//資料--成員函式
    void show()
    {
        cout<<name<<endl;
        cout
<<age<<endl; } public//資料--成員變數 char* name; int age; }; int main() { Person p;//類的例項化 p.name = "Tom"; p.age = 6; p.show(); Person* Ptr=&p; Ptr->name="mary"; Ptr->age=12; Ptr->show(); }

三種訪問限定符

  • public 公有
  • protected 保護
  • private 私有

    1. public成員可從類外部直接訪問,private/protected成員不能從類外部直接訪問。
    2. 每個限定符在類體中可使用多次,它的作用域是從該限定符出現到下一個限定符之前或類體結束前。
    3. 類體中如果沒有定義限定符,則預設為私有的。
    4. 類的訪問限定符體現了面向物件的封裝性。

作用域:

類的作用域:

  1. 每個類都定義了自己的作用域,類的成員都在這個類的作用域中,成員函式內可任意訪問成員函式和成員變數
  2. 物件可以直接訪問公有成員,也可以通過指向物件的指標通過->訪問物件的公有成員。
  3. 在類體外定義成員,需要使用 ::作用域解析符指明成員屬於哪個類域。

成員函式的宣告和定義

類內定義成員函式

class Person
{
public:
    void Show()
    {
        cout<<_name<<_sex<<_age<<endl;
    }

public:
    char* _name;
    char* _sex;
    int _age;
};

類外定義成員函式

class Person
{
public:
    void Show();
public:
    char* _name;
    char* _sex;
    int _age;
};
void Person::Show()
{
    cout<<_name<<_sex<<_age<<endl;
}

類物件模型大小

每個物件的大小為類中所有成員變數的大小之和,但是也要遵循記憶體對齊原則

成員函式不佔大小。

記憶體對齊問題:

複習知識點-記憶體對齊規則:

第一個成員在結構體變數偏移量為0的地址處對齊

其他成員都要對齊到某個對齊數的整數倍的地址處

對齊數=min(編譯器預設對齊數,該成員大小)

結構體大小為最大對齊數的整數倍

巢狀結構體的情況:巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數的整數倍

為什麼記憶體對齊:

  1. 平臺原因(移植原因): 不是所有的硬體平臺都能訪問任意地址上的任意資料的;某些硬體平臺只能在某些地址處取某些特定型別的資料,否則丟擲硬體異常。
  2. 效能原因: 資料結構(尤其是棧)應該儘可能地在自然邊界上對齊。 原因在於,為了訪問未對⻬的記憶體,處理器需要作兩次記憶體訪問;⽽對齊的記憶體訪問僅需要 一次訪問。

總體來說:
結構體的記憶體對齊是拿空間來換取時間的做法。
那在設計結構體的時候,我們既要滿⾜對齊,⼜要節省空間,如何做到:
讓佔用空間⼩的成員儘量量集中在一起。

空類的大小?

一個位元組,為了佔位,表示它存在過。

相關推薦

C++初識物件

類和物件 面向物件 面向物件程式設計:面向物件程式設計是一種程式設計範性,同時也是一種程式開發的方法。 物件:指的是類的例項,將物件作為程式的基本單元,將程式和資料封裝在其中,以提高軟體的重要性,靈活性和擴充套件性。 c++不是純面嚮物件語言,而是基

C++中的物件(一)

https://www.cnblogs.com/metalsteel/p/6266505.html 一,類的概念及封裝 1.什麼是封裝 第一層含義:封裝是面向物件程式設計最基本的特性。把資料(屬性)和函式(方法)合成一個整體,這在計算機世界中是用類和物件實現的。(把屬性和方法進行封

C++初學】物件定義與建構函式

一.類和物件定義 class 型別名 { public: 公有成員(外部介面) private: 私有成員(只允許類內函式訪問,有後續操作) protected: 保護成員 二.建構函式 def:給物件進行初始化的函式。 gra: 函式名與類名相同; 無返回值(return); 1.委託

c++基礎2——物件

1、class的構成 class 類名{     public://公有成員      函式1;     變數1;      ……   

C++】初學物件的概念

C++中的類Class可以看作C語言中結構體的升級版。結構體是一種構造型別,它可以包含若干成員變數,而其中每個成員變數的型別又可以不同。例如: struct Student {//結構體包含的成員變數 char *name; int age; float score; }; void D

Beginng_Java7(譯)發現物件(第二章3.4.5節)(完)

多型 一些現實世界的實體可以改變他們的形式。 例如,水(在地球上而不是星際空間)自然是液體,但在冷凍時會變成固體,在加熱到沸點時會變成氣體。 諸如經歷變態的蝴蝶之類的昆蟲是另一個例子。 改變形式的能力被稱為多型,並且對於在程式語言中建模是有用的。 例如,通過引入

C++實驗2-物件1

一、問題及程式碼 /* * 檔名稱: C++ * 作 者: 尚超 * 完成日期:2016年3月11日 * 版 本 號:v1.0 * 對任務及求解方法的描述部分: * 輸入描述: * 問題描述: 輸入任意三個數,按從小到大輸出 * 程式輸出: * 問題分

C++實驗3_3 物件(3)

五、實驗結果及分析 1. 構造了一個CPU! CPU開始執行! CPU停止執行! 析構了一個CPU! 3. #include <iostream.h> enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7

C++學習筆記——物件(二)

設計一個類就是設計一個新的型別,應該考慮: 此型別的“合法值”是什麼? 此型別應該有什麼樣的函式和操作符? 新型別的物件該如何被建立和銷燬? 如何進行物件的初始化和賦值? 物件作為函式的引數如何以值傳遞? 誰將使用此型別的物件成員? 類定義的語法形式: clas

C++中的物件

一、類和物件的關係     每一個實體都是物件。有一些物件是具有相同的結構和特性的。每個物件都屬於一個特定的型別。在C++中物件的型別稱為類(class )。類代表了某一批物件的共性和特徵。前面已說明:類是物件的抽象,而物件是類的具體例項(instance)。正如同結構

C++初識物件(2)

在之前的文章裡,我們出初步瞭解了,什麼是類,類如何定義,類的大小怎麼計算等 一個空類裡面什麼也沒有,但是它並非是什麼也沒有,只要是類,它就有6個預設的成員函式: 1.建構函式 2.解構函式 3.拷貝建構函式 4.賦值操作符過載 5.取地址操作符過載 6.co

初識c#---物件

  1.類  定義:類是描述具有相同特徵與行為的事物的抽象,類內部包含類的特徵和類的行為  特徵:     在類中的表現形式為欄位     欄位:訪問修飾符 + 資料型別 + 欄位名;     欄位的預設修飾符為private     類的預設修飾符為in

C++學習筆記(二)物件

類是物件共性的抽象,一種自定義的資料型別,可認為是C語言中結構體的拓展。它的作用是將資料和演算法(資料操作)封裝在使用者自定義的抽象資料型別中。 為什麼要在C++中新增類這樣一種“工具“呢? 程式中的每一組資料都是為某一種操作而準備的。而資料的交叉使用容易導致資料被誤操作,

初識C++: 物件(1)

類和物件的初步認識: 類是物件的抽象,物件是類的具體例項。因為類是抽象的,所以類不佔用記憶體,而物件是具體的,佔用儲存空間。 我們都知道,C語言時面向過程的語言,它關注的是過程中的資料與方法。 C++是面向物件的語言,它關注的是物件的屬性與功能 用一張圖來理解類和物件

【轉】C#中的兩把雙刃劍抽象接口

實例 可維護 對象 為什麽不使用 程序 一定的 代碼 方式 索引 轉:http://www.cnblogs.com/djzxjblogs/p/7587735.html 第一次面試的時候, 面試官問我,抽象類和接口的區別。 本人也是,按照面試寶典上的回答,說了一大堆。

面向物件【day07】新式經典(八)

本節內容 1、概述 2、類的多繼承 3、經典類VS新式類 4、總結 一、概述   在python還支援多繼承,但是一般我們很少用,有些語言乾脆就不支援多繼承,有多繼承,就會帶來兩個概念,經典類和新式類,下面我就來學學什麼是多繼承,什麼是經典類和新式類? 二、類的多繼承 2.1 多繼承

C++物件(下篇)

1. 再談建構函式 2. static成員 3.C++11的成員初始化新玩法 4. 友元 5.內部類 6. 再次理解封裝   1. 再談建構函式 1.1建構函式體賦值 在建立物件時,編譯器通過呼叫建構函式,給物件中各個成員變數一個合適的初始值

C++學習筆記 (二) ---- 物件

①、類和物件 類的定義,如下: class Student{ public: //成員變數 char *name; int age; float score; //成員函式 void say(){ cout<<

C++物件.四個預設成員函式(賦值運算子過載)

1.(1)類的定義   類就是具有相同資料和相同操作的一組物件的集合。 學生類定義: class student {//成員變數char* name;int age;int sex;//成員函式void speak(){cout<<name<<"年

Java基礎 實驗二物件

1.實驗目的 掌握類的宣告、物件的建立、方法的定義和呼叫、建構函式的使用。 2.實驗內容 1)定義一個表示學生資訊的類Student,要求如下: ① 類Student的成員變數:       sNO 表示學號;