1. 程式人生 > >C++筆記 第十六課 類的真正形態---狄泰學院

C++筆記 第十六課 類的真正形態---狄泰學院

如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux

第十六課 類的真正形態

問題:經過不停的改進,結構體struct變得越來越不像它在C語言中的樣子!!!

1.類的關鍵字

struct在C語言中已經有了自己的含義,必須繼續相容
在C++中提供了新的關鍵字class用於類定義
class和struct的用法是完全相同的
class和struct有什麼區別?
在用struct定義類時,所有成員的預設訪問級別是public
在用class定義類時,所有成員的預設訪問級別是private
在這裡插入圖片描述

16-1 class的初探

#include <stdio.h>
struct A
{
    // defualt to public
    int i;
    // defualt to public
    int getI()
    {
        return i;
    }
};
class B
{
public:
    // defualt to private
    int i;
    // defualt to private
    int getI()
    {
        return i;
    }
};
int main()
{
    A a;
    B b;
    
    a.i = 4;
    
    printf("a.getI() = %d\n", a.getI());
    
    b.i = 4;
    
    printf("b.getI() = %d\n", b.getI());
    
    return 0;
}

小例項:
需求:開發一個用於四則運算的類
提供setOperator函式設定運算型別
提供setParameter函式設定運算引數
提供result函式進行運算
其返回值表示運算的合理性
通過引用引數返回結果

2.類的真正形態

C++中的類支援宣告和實現的分離
將類的實現和定義分開
.h標頭檔案中只有類的宣告:成員變數和成員函式的宣告
.cpp原始檔中完成類的其它實現:成員函式的具體實現

例項分析:Operator類的分析

#include <stdio.h>
#include "Operator.h"
int main()
{
    Operator op; //定義類的物件
    double r = 0;
    
    op.setOperator('/');
    op.setParameter(9, 3);//設定兩個運算元
    
    if( op.result(r) )
    {
        printf("r = %lf\n", r);
    }
    else
    {
        printf("Calculate error!\n");
    }
    
    return 0;
}

::是運算子中等級最高的,它分為三種:
1)global scope(全域性作用域符),用法(::name)
2)class scope(類作用域符),用法(class::name)
3)namespace scope(名稱空間作用域符),用法(namespace::name)
他們都是左關聯(left-associativity)
他們的作用都是為了更明確的呼叫你想要的變數,如在程式中的某一處你想呼叫全域性變數a,那麼就寫成::a,如果想呼叫class A中的成員變數a,那麼就寫成A::a,另外一個如果想呼叫namespace std中的cout成員,你就寫成std::cout(相當於using namespace std;cout)意思是在這裡我想用cout物件是名稱空間std中的cout(即就是標準庫裡邊的cout)
小結


C++引進了新的關鍵字class用於定義類
struct和class的區別在於預設訪問級別的不同
C++中類支援宣告和實現的分離
在標頭檔案中宣告類
在原始檔中宣告類