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("苍井空");
}