天天看點

【C++程式設計語言】之 類和對象——封裝

作者:煩人的星辰

#頭條創作挑戰賽#

C++面向對象的三大特性為:封裝,繼承,多态。

1.封裝

封裝的意義:

1.将屬性和行為作為一個整體,表現生活中的事物

2.将屬性和行為加以權限控制。

文法: class 類名 { 通路權限: 屬性 / 行為};

const double PI = 3.14;
//class 代表設計一個類
class Circle{
    //通路權限
    public://公共權限
    //屬性
        int m_r;
    //行為
    //擷取圓的周長
    double calcu(){
        return 2 * PI * m_r;
    }
}
int main(){
    //通過圓類建立一個具體的圓(對象)
    Circle c1;
    c1.m_r = 10;
    cout << "圓的周長:"<< c1.calcu() <<endl;
}           

2.類的權限

class Student{
    //通路權限
    public://公共權限
    //屬性
        string name;//成員屬性,成員變量
        int age;
    //命名權限
    void SetName(string Lname){//成員方法,成員函數
        name = Lname;
    }
}
int main(){
    //通過學生類建立一個具體的學生(對象)
    Student stu1;
    //通過函數更改學生姓名
    stu1.SetName("張三");
}
//類在設計時,可以把屬性和行為放在不同的權限下,加以控制
通路權限有三種:
    1.public  公共權限
    2.protected 保護權限
    3.private 私有權限
 //公共權限  public  類内可以通路  類外也可以通路
 //保護權限  protected 類内可以通路 類外不可以通路 繼承中子類可以通路父類的,對于私有的父類不能讓子類繼承 
 //私有權限  private  類内可以通路 類外不可以通路   
class Person{
    public:
            string name;
    protected: 
            string car;
    private:
            int Password;
    public:
        void func(){//不管什麼權限,在類内都可以通路
            name = "張三";
            car = "拖拉機";
            Password = 123456;
        }
}
int main(){
    Person p1;
    p1.name = "李四";
    p1.car = "奔馳";//錯誤 類外是不可通路protected權限
    p1.Password = 123;//錯誤 類外是不可以通路private權限
    p1.func();//可以通過類内的函數去調用類外不可通路的屬性或函數
}           

3.struct 和class的差別

struct 預設的權限是 公共 public

class 預設的權限是 私有 private

4.成員屬性設定為私有

優點1:将所有成員屬性設定為私有,可以自己控制讀寫權限

優點2:對于寫權限,我們可以檢測資料的有效性

class Person{
private:
    string n_name;//可讀可寫
    int age;//隻讀
    string c_car;//隻寫
 public:
    void setName(string name){
        n_name = name;
    }
    string getName(){
        return  n_name; 
    }
    int getAge(){
        age = 0;//初始
        return age;
    }
    void setCar(string car){
        c_car = car;
    }
}
int main(){
    Person p1;
    p1.setName("張三");//寫
    cout << p1.getName() <<endl;//讀
    cout << p1.getAge() <<endl;//讀
    p1.setCar("奔馳");//寫
}           

5.全局函數和成員函數

//分别利用全局函數和成員函數判斷正方形是否相等
//隻有正方形的長寬高相等就代表正方形相等
class Cube{
private:
    int m_L;//長
    int m_W;//寬
    int m_H;//高
public: 
    //設定長
    void setL(int L){
        m_L = L;
    }
    //擷取長
    int getL(){
        return m_L;
    }
    //設定寬
    void setW(int w){
        m_W = w;
    }
    //擷取寬
    int getW(){
        return m_W;
    }
    //設定高
    void setH(int H){
        m_H = H;
    }
    //擷取高
    int getH(){
        return m_H;
    }
    bool isSame(Cube &c){//采用引用的方式,節省記憶體空間
        if(m_L==c.getL() && m_W==c.getW() && m_H==c2.getH()){
            return 1;
        }else{
            return 0;
        }
    }
}
bool isSame(Cube &c1,Cube &c2){//采用引用的方式,節省記憶體空間
    if(c1.getL()==c2.getL() && c1.getW()==c2.getW() && c1.getH()==c2.getH()){
        return 1;
    }else{
        return 0;
    }
}
void main(){
    Cube c1;
    c1.setL(10);
    c1.setW(10);
    c1.setH(10);
    Cube c2;
    c2.setL(10);
    c2.setW(10);
    c2.setH(10);
    //調用全局函數判斷
    if(isSame(c1,c2)){
        cout <<"正方形相同"<<endl;
    }else{
         cout <<"正方形不相同"<<endl;
    }
    //調用成員函數判斷
    int rel = c1.isSame(c2);
    if(rel){
        cout <<"正方形相同"<<endl;
    }else{
         cout <<"正方形不相同"<<endl;
    }
}           

繼續閱讀