C++核心编程笔记第四篇 类和对象的三大特性---封装特性

C++面向对象的三大特性:封装继承多态

C++认为万事万物皆为对象,对象上有其 属性 和 行为

例如:

人可以是对象,属性有姓名、身高....行为有唱、跳、rap、篮球...

车可以是对象,属性有车轮、车灯....行为有载人、放音乐...

具有相同性质(属性)的对象,我们可以抽象为类,人属于人类,车属于车类。

4.1 封装

4.1.1 封装的意义

1、将属性和行为作为一个整体,表现生活中的事物

2、将属性和行为加以权限控制

封装意义一:

在设计类的时候,属性和行为写在一起,表现事物

语法:class 类名{ 访问权限:属性 / 行为 };

#include <iostream>
#include <string>

using namespace std;

// 设计一个圆类,求圆的周长PI*2r
const double PI = 3.14159;

// class代表设计一个类,后面跟的就是类名
class circle
{
	// 访问权限
public:// 表示公共权限,使得类的属性和行为在类内外都能被访问

	// 属性(一般是变量)
	int m_r; //半径

	// 行为(通常是用函数来代表它)
	// 获取圆的周长
	double calculateZC()
	{
		return 2 * PI *m_r;
	}
};


int main()
{	
	// 通过 圆类 创建具体的圆(对象)
	// 实例化(通过一个 类 创建一个对象的过程)
	circle c1;

	// 给圆对象的属性进行赋值
	c1.m_r = 10;

	cout << "圆的周长为:" << c1.calculateZC() << endl; // 通过类的行为获得圆的周长

	system("pause");
	return 0;
}

运行结果:

 

#include <iostream>

#include <string>

using namespace std;

// 设计一个学生类,属性有姓名和学号

// 可以给姓名和学号赋值,可以显示学生的姓名和学号

// 设计学生类

class student

{

public:

// 属性

string m_Name;

int m_ID;

// 行为

// 显示姓名和学号

void showStudent()

{

cout << " 姓名:" << m_Name << " 学号:" << m_ID << endl;

}

// 还可以通过类里面的行为给属性赋值

void setName_ID(string name, int ID)

{

m_Name = name;

m_ID = ID;

}

};

int main()

{

// 1、创建一个具体的学生-->实例化对象

student s1;

// 2、给s1对象进行赋值操作

s1.m_Name = " 张三 ";

s1.m_ID = 7229;

// 3、显示学生信息

s1.showStudent();

student s2;

s2.m_Name = " 李四 ";

s2.m_ID = 7228;

s2.showStudent();

// 除了上面给对象赋值的操作,还可以通过在类里面的行为给对象赋值

student s3;

s3.setName_ID(" 王五 ", 7227);

s3.showStudent();

system("pause");

return 0;

}

运行结果:

 

再介绍几个专业术语:

类中的属性行为都叫 成员;

属性: 成员属性 或 成员变量

行为: 成员函数 或 成员方法

封装意义二:

类在设计时,可以把属性和行为放在不同的权限下,加以控制。

访问权限有三种:

  1. public 公共权限
  2. protected 保护权限
  3. private 私有权限

#include <iostream>

#include <string>

using namespace std;

// 访问权限(三种)

// 公共权限 public 成员  类内可以访问,类外可以访问

// 保护权限 protected 成员  类内可以访问,类外不可以访问(儿子可以访问父亲中的保护内容)

// 私有权限 private 成员  类内可以访问,类外不可以访问(儿子不可以访问父亲的私有内容)

class person

{

public:

string m_Name;

protected:

string m_Car;

private:

int m_Password;

private:

void func()

{

m_Name = " 张三 "; // 在类内中这三种权限下的成员变量都可以被访问

m_Car = " Benz ";

m_Password = 123456;

}

};

int main()

{

person father;

father.m_Name = "李四"; // 公共权限下的成员变量可以在类外访问

// father.m_Car = "BYD"; // 此操作非法,因为保护权限下的成员变量不可以在类外访问

// father.m_Password = 123; // 此操作非法,因为私有权限下的成员变量不可以在类外访问

// father.func(); // 此操作非法,因为私有权限下的成员方法不可以在类外访问

system("pause");

return 0;

}

4.1.2 struct和class的区别

在C++中struct和class唯一的区别就是 默认的访问权限不同

也就是说在C++中struct和class很相近,都可以表现一个类。如果你不想用class创建一个类,可以用struct去创建一个类(但要注意区别---默认权限不同)。

区别:

  1. struct 默认权限为公共
  2. class  默认权限为私有

#include <iostream>

#include <string>

using namespace std;

// struct 和 class 的区别

class C1

{

int m_A; // 默认权限为  私有

};

struct C2

{

int m_A; // 默认权限为  公共

};

int main()

{

C1 c1;

// c1.m_A = 100; // 此操作非法,因为class类的默认权限为私有

C2 c2;

c2.m_A = 100; // struct类的默认权限为公共

system("pause");

return 0;

}

4.1.3 成员属性设置为私有

优点1:可以自己控制读写权限

优点2:对于权限,我们可以检测数据的有效性

#include <iostream>

#include <string>

using namespace std;

// 成员属性设置为私有

class Person

{

public:  

void setName(string name) // 控制成员的 写权限

{

m_Name = name;

}

string getName() // 控制成员的 读权限

{

return m_Name;

}

void setAge(int age) // 控制成员的 写权限

{

if (age < 0 || age>150) // 优点2:对于写权限,我们可以检测数据的有效性

{

m_Age = 0;

cout << "我一眼就能看出你不是人" << endl;

return; // 若return不带返回值且应用于void函数,就相当于break

}

m_Age = age;

}

int getAge() // 控制成员的 读权限

{

return m_Age;

}

private: // 如何访问这些数据?那就需要对外提供一些接口(用public来做)

string m_Name;

int m_Age;

};

int main()

{

Person P8;

P8.setName(" Benz ");

cout << P8.getName() << endl;

P8.setAge(1000);

cout << P8.getAge() << endl;

system("pause");

return 0;

}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值