封装(C++)

C语言下的封装 和 C++的封装 区别

C语言封装


    属性和行为分开处理
    类型检测不够

struct Person {
    char mName[64];
    int mAge;
};

void PersonEat(struct Person* p) {
    printf("%s 在吃饭。\n",p->mName);
}

struct Dog {
    char mName[64];
    int mAge;
};

void DogEat(struct Dog* dog) {
    printf("%s 在吃狗粮。\n", dog->mName);
}

void test25() {
    struct Person p1;
    strcpy(p1.mName, "德玛西亚");

    PersonEat(&p1);

    struct Dog d1;
    strcpy(d1.mName, "旺财");

    DogEat(&d1);

    struct Person p2;
    strcpy(p2.mName, "老王");

    DogEat(&p2);
}

C++封装


    严格类型转换检测
    属性和行为 绑定在一起
    属性 和 行为 作为一个整体 表示 生活中的事物


    
    访问权限 


        public    公共权限 
        protected    保护权限
        private    私有权限
        
    struct 和 class 是一个意思
        唯一的不同:默认权限
        struct 是 public 
        class 是 private
        
        private:私有权限,
            私有成员(属性、函数)在类内部可访问,类外部不可访问
        public:公共权限
            在类内部 和 类外部 都可以访问 
        protected:保护权限
            类内都可以访问, 当前类的 子类可以访问
            类外部 不可以访问

struct 

struct Person2 {
    char mName[64];
    int mAge;
    void PersonEat() {
        cout << mName << "在吃饭。" << endl;
    }
};

struct Dog {
    char mName[64];
    int mAge;
    void DogEat() {
        cout << mName << "在吃狗粮。" << endl;
    }
};

void test26() {
    Person2 p1;
    strcpy(p1.mName, "老王");
    p1.PersonEat();
    //p1.DogEat();
}

class

class Animal {
    void eat();//默认私有权限private
    int mAge;
public:
    int mHeight;
protected:
    int mWeight;
    void setWeight() {
        mWeight = 100;
    }
};

void test27() {
    Animal an;
    //an.eat();
    //an.mAge = 1;
    an.mHeight = 199;
    //an.mWeight = 100;
}

建议:将成员变量设置为private


    自己提供公共的对外接口来进行 set 或者 get 方法访问

class Person3 {
public:
    /*void setAge(int age) {
        m_Age = age;
    }*/
    int getAge() {
        return m_Age;
    }

    string getName() {
        return m_Name; 
    }

    void setAge(int age) {
        if (age < 0 || age>100) {
            cout << "old monster." << endl;
            return;
        }
        m_Age = age;
    }

    void setName(string name) {
        m_Name = name;
    }

    void setLover(string lover) {
        m_lover = lover;
    }
    
private:
    int m_Age = 0;//read and write
    string m_Name;//r&w
    string m_lover;//write only

protected:

};

void test28() {
    Person3 p1;

    p1.setName("老王");
    cout << "Name:" << p1.getName() << endl; 

    p1.setAge(120);
    cout << "Age:" << p1.getAge() << endl;

    p1.setLover("苍井空");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值