C++语言的封装
- 将属性和行为作为一个整体,来表示生活中具体的事物
- 有访问权限
- class 和struct唯一区别 默认权限不同
- class默认是private
- struct 默认是public
- public 是类内类外都可以访问到
- protected 类内可以,类外不可以
- private 类内可以,类外不可以
c语言
struct Person
{
char mName[64];
int mAge;
};
struct Dog
{
char mName[64];
int mAge;
};
void PersonEat(struct Person *p)
{
printf("%s 在吃人饭 \n",p->mName);
}
void test01()
{
struct Person p1;
strcpy(p1.mName, "德玛西亚");
PersonEat(&p1);
}
运行德玛西亚 在吃人饭
。
但是
void DogEat(struct Dog * dog)
{
printf("%s 在吃狗粮 \n", dog->mName);
}
void test02()
{
struct Dog d;
strcpy(d.mName, "旺财");
DogEat(&d);
struct Person p1;
strcpy(p1.mName, "老王");
DogEat(&p1);
}
运行
旺财 在吃狗粮
老王 在吃狗粮
C语言封装 属性和行为分开处理了 ,类型检测不够
c++的封装
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
struct Person
{
char mName[64];
int mAge;
void PersonEat()
{
cout << mName <<"吃人饭" << endl;
}
};
struct Dog
{
char mName[64];
int mAge;
void DogEat()
{
cout << mName << "吃狗粮" << endl;
}
};
//C++中的封装 严格类型转换检测, 让属性和行为 绑定到一起
void test01()
{
Person p1;
strcpy(p1.mName, "老王");
p1.PersonEat();
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
c++语言的public、protected、private
- public 类内 类外 都可以访问
- protected 类内可以访问 类外 不可以访问 (子类可以方法)
- private 类内可以访问 类外 不可以访问 (子类不可以方法)
class Animal
{
private:
//如果我不声明权限,默认的权限是 private
void eat(){ mAge = 100; };
int mAge;
public:
int mHeight;
protected: //保护权限 类内部可以访问 ,(当前类的子类可以访问) , 类外部不可以访问
int mWeight;
void setWeight(){ mWeight = 100; };
};
//所谓私有权限 就是私有成员(属性、函数) 在类内部可以访问,类外部不可以方法
//公共权限 ,在类内部和类外部都可以访问
void test02()
{
Animal an;
//an.eat();
//an.mAge; //私有不可以访问到
an.mHeight = 100; //公有权限在类外部可以访问到
//an.mWeight = 100; //保护权限 在类外不可访问到
}
- 建议将所有成员属性设置为私有
- 自己提供公共的对外接口来进行 set或者get方法访问