C++-Record15—类的封装和访问控制

目录

类的封装

类的访问控制

struct和class关键字的区别

总体代码


类的封装

以求圆的面积为例,来演示一下类的封装。

class MyCircle
{
public:
	double m_r; //属性 成员变量
	double m_s;

public:
	double getR()
	{
		return m_r;
	}
	void setR(double r) //成员函数
	{
		m_r = r;
	}

	double getS()
	{
		m_s = 3.14*m_r*m_r;
		return  m_s;
	}
protected:
private:
};

类的封装

封装(Encapsulation

A)封装,是面向对象程序设计最基本的特性。把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类与对象实现的。

B)封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

备注:有2层含义(把属性和方法进行封装 对属性和方法进行访问控制)

C++中类的封装

       成员变量,C++中用于表示类属性的变量

       成员函数,C++中用于表示类行为的函数

下面看看封装的威力:

void printCircle01(MyCircle *pC)
{
	cout<<"r"<<pC->getR()<<endl;
	cout<<"s"<<pC->getS()<<endl;
}

void printCircle02(MyCircle &myc)
{
	cout<<myc.getS()<<endl;
}


void printCircle03(MyCircle myc)
{

}
void main_类的封装第一层含有()
{
	MyCircle c1, c2;
	c1.setR(10);
	cout<<"c1 s: "<<c1.getS()<<endl;

	c1.setR(11);
	printCircle01(&c1);


	c2.setR(20);
	printCircle01(&c2);


	//引用
	printCircle02(c2);

	cout<<"hello...."<<endl;
	system("pause");
}

不但可以调用类的属性,而且可以掉类的方法,这是因为类封装了成员变量和成员函数,这就比简单的C语言的结构体要好的多。

类的访问控制

访问控制:我可以让想被访问的东西露出来,让不想被访问的东西给隐藏,即公共,私有,保护(类的访问控制关键字)。

注意区分类的内部与外部。在class里面的,为类的内部,在类之外的为外部。

public:  修饰的成员变量和函数 可以在类的内部和类的外部访问。
       private:  修饰的成员变量和函数只能在类的内部被访问,不能在类的外部访问。
       protected:  修饰的成员变量和函数只能在类的内部被访问,不能在类的外部访问, 但有个特例,即用在继承里面。

class MyAdvCircle
{
private:
	double m_r2; //没有权限修饰的成员变量 函数 是 默认是私有属性

private:
	double m_r; //属性 成员变量
	double m_s;  //相当于你的银行卡密码

public:
	double getR()  //你的名字
	{
		return m_r;
	}
	void setR(double r) //成员函数
	{
		m_r = r;
	}

	double getS()
	{
		m_s = 3.14*m_r*m_r;
		return  m_s;
	}
};

void main_02()
{
	MyAdvCircle c1, c2;
	//c1.m_r = 10;   //无法访问
	c1.setR(10);

	system("pause");
}

如果类外部的属性去操作类时,如果类的属性是私有的,就不能达成,如果是公有的,就可以。另外,没有权限修饰的成员变量及函数默认是私有属性的。

struct和class关键字的区别

在用struct定义类时,所有成员的默认属性为public

在用class定义类时,所有成员的默认属性为private

struct AAA
{
	int a;  //用struct关键字定义的类,不写,默认属性是public的.
			//class									private

public:
protected:
private:
};

void main()
{
	AAA a1;
	a1.a = 11;

	system("pause");
}

struct 没有特别声明,默认都是public的。

总体代码

dm01_类的封装.cpp

#include "iostream"

using namespace std;

//求圆形的面积
//封装有2层含义
//1 把属性和方法进行封装 
//2 对属性和方法进行访问控制

//3 类的内部和类的外部


//4 类的访问控制关键字
//public:  修饰的成员变量和函数 可以在类的内部和类的外部访问
//private:  修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问
//protected:  修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问, 用在继承里面


class MyCircle
{
public:
	double m_r; //属性 成员变量
	double m_s;

public:
	double getR()
	{
		return m_r;
	}
	void setR(double r) //成员函数
	{
		m_r = r;
	}

	double getS()
	{
		m_s = 3.14*m_r*m_r;
		return  m_s;
	}
protected:
private:
};

//类的封装的威力
//类封装的成员变量和成员函数  //可以调用类的成员函数
void printCircle01(MyCircle *pC)
{
	cout<<"r"<<pC->getR()<<endl;
	cout<<"s"<<pC->getS()<<endl;
}

void printCircle02(MyCircle &myc)
{
	cout<<myc.getS()<<endl;
}


void printCircle03(MyCircle myc)
{

}
void main_类的封装第一层含有()
{
	MyCircle c1, c2;
	c1.setR(10);
	cout<<"c1 s: "<<c1.getS()<<endl;

	c1.setR(11);
	printCircle01(&c1);


	c2.setR(20);
	printCircle01(&c2);


	//引用
	printCircle02(c2);

	cout<<"hello...."<<endl;
	system("pause");
}

class MyAdvCircle
{
private:
	double m_r2; //没有权限修饰的成员变量 函数 是 默认是私有属性

private:
	double m_r; //属性 成员变量
	double m_s;  //相当于你的银行卡密码

public:
	double getR()  //你的名字
	{
		return m_r;
	}
	void setR(double r) //成员函数
	{
		m_r = r;
	}

	double getS()
	{
		m_s = 3.14*m_r*m_r;
		return  m_s;
	}
};

void main_02()
{
	MyAdvCircle c1, c2;
	//c1.m_r = 10; 
	c1.setR(10);

	system("pause");
}

struct AAA
{
	int a;  //用struct关键字定义的类,不写,默认属性是public的.
			//class									private

public:
protected:
private:
};

void main()
{
	AAA a1;
	a1.a = 11;

	system("pause");
}
发布了140 篇原创文章 · 获赞 6 · 访问量 4844

猜你喜欢

转载自blog.csdn.net/qq_17846375/article/details/104048504