c++从入门到精通——C++语言的封装

C++语言的封装

  • 将属性和行为作为一个整体,来表示生活中具体的事物
  • 有访问权限
  • class 和struct唯一区别 默认权限不同
  1. class默认是private
  2. 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方法访问
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章