c++類的創建與使用
前言:
之前一直對c++的類的創建與使用不太熟悉,有些概念還是有點模糊,借着這次休息的機會整理一下對應是知識點。如有不正確的地方還希望各位讀者批評指正。
一.C++中public、protect、private的訪問權限控制
繼承修飾符,就像是一種篩子,將基類的成員篩到派生類。public、protected、private,就是篩子的眼。
通過public繼承,所有基類成員(除了private),public、protected都到了派生類里面,public篩眼比較大,不會改變訪問權限。
通過protected繼承,所有基類成員(除了private),public、protected都到了派生類里面,protected篩眼大小適中,所有過來的成員都變成了protected。
通過private繼承,所有基類成員(除了private),public、protected都到了派生類里面,private篩眼最小,所有過來的成員都變成了private。
二.實例
類是一個模板,可用類生成一系列可用的實例。例如 int B就是生成了一個符合int的數據B,類也是一樣,使用類名就可以直接生成一個實例,
該實例中包含類中所有的數據類型和對這些數據的操作方法。
首先,創建一個類
class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: }
該類中包含三個部分,私有部分(private)、保護部分(protected)、公有部分(public)(當然也可以都沒有成為一個空類),其中private和protected部分中的數據和內容不可以在類外通過對象(實例)直接調用。
#include<iostream> using namespace std; #define MAX 10 class OBJ //創建類 { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: }; void main() { OBJ ob;//使用類實例化ob ob.Num = 10; }
如上使用ob的private成員編譯無法通過,報錯test.cpp(17): error C2248: “OBJ::Num”: 無法訪問 private 成員(在“OBJ”類中聲明)。一般使用public方法來操作private數據,以保證數據的安全性,這同樣體現了C++的封裝性。
#include<iostream> using namespace std; #define MAX 10 class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: void Get_obj(char name[], int num, float price) { strcpy(Name, name); Num = num; Price = price; Total_price = Price*Num; } char *Get_name() { return Name; } int Get_num() { return Num; } float Get_price() { return Price; } float Get_total_price() { return Price * Num; } };
一個類結束后記得加上分號,血淚教訓,怎么都找不到錯誤原因)成員函數可以在類內部實現(如上所示),也可以在類外部實現,若在外部實現其內部只需將函數聲明后加上分號.
其外部實現使用如下格式
返回值類型 類名 ::函數名(參數)
class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: void Get_obj(char name[], int num, float price); }; void OBJ::Get_obj(char name[], int num, float price) { strcpy(Name, name); Num = num; Price = price; Total_price = Price*Num; }
::叫做作用域解析符,當類的方法在類外部實現時,用來限定該方法是哪一個類的, 當一個類中有數據和方法但是沒說明其屬於哪部分(protected、private、protected),則默認其為私有部分.
#include<iostream> using namespace std; #define MAX 10 class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: void Get_obj(char name[], int num, float price) { strcpy(Name, name); // strcpy Num = num; Price = price; Total_price = Price*Num; } char *Get_name() { return Name; } int Get_num() { return Num; } float Get_price() { return Price; } float Get_total_price() { return Price * Num; } }; void main() { OBJ ob; ob.Get_obj("LLL",10,10); cout<<ob.Get_name()<<endl; cout<<ob.Get_num()<<endl; cout<<ob.Get_price()<<endl; cout<<ob.Get_total_price()<<endl; }
參考鏈接:https://blog.csdn.net/sw3300255/article/details/84813233