c语言的封装属性和行为分开处理,类型检测不够
c++中的封装 严格类型转换检测,让属性和行为绑定到一起,属性和行为作为一个整体来表示生活中的事物。
控制权限:
class和struct是一个意思,唯一的不同 默认权限,
public(公共权限)
struct默认权限是public ,内外部可以直接访问
private(私有权限,子类不可以访问)
class默认的权限是private 私有权限,外部不可以访问,内部可以访问
建议将类的成员变量设置为私有
protected(保护权限,子类可以访问)
protected保护权限 类内部可以访问 当前类的子类可以访问,类外部不可以访问
c中封装
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Person
{
char name[64];
int age;
};
struct Dog
{
char name[64];
int age;
};
void PersonEat(struct Person* p)
{
printf("%s 吃饭\n", p->name);
};
void DogEat(struct Dog * d)
{
printf("%s 吃狗粮\n", d->name);
}
void test()
{
struct Dog d;
strcpy(d.name,"旺财");
DogEat(&d);
struct Person p;
strcpy(p.name, "小王");
// PersonEat(&p);
DogEat(&p);
//可以正常调用
}
int main()
{
test();
return EXIT_SUCCESS;
}
c++中封装
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
struct Person
{
char name[64];
int age;
void PersonEat()
{
cout << name << "吃饭" << endl;
}
};
struct Dog
{
char name[64];
int age;
void dogEat()
{
cout << name << "吃饭" << endl;
}
};
void test()
{
Person p1;
strcpy(p1.name, "小王");
p1.PersonEat();
//p1.DogEat(); //类型错误
}
int main()
{
test();
return EXIT_SUCCESS;
}