c++類的創建與使用


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM