首页 > 编程语言 >【C++ OOP 01】封装

【C++ OOP 01】封装

时间:2023-01-26 11:55:42浏览次数:62  
标签:01 return int C++ OOP c1 权限 class 属性

封装

封装的意义

封装是C++面向对象三大特性之一

封装的意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以权限控制

封装意义一

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

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

示例1:设计一个圆类,求圆的周长

示例代码:

//圆周率
const double PI = 3.14;

//1、封装的意义
//将属性和行为作为一个整体,用来表现生活中的事物

//封装一个圆类,求圆的周长
//class代表设计一个类,后面跟着的是类名
class Circle
{
public:  //访问权限  公共的权限

	//属性
	int m_r;//半径

	//行为
	//获取到圆的周长
	double calculateZC()
	{
		//2 * pi  * r
		//获取圆的周长
		return  2 * PI * m_r;
	}
};

int main() {

	//通过圆类,创建圆的对象
	// c1就是一个具体的圆
	Circle c1;
	c1.m_r = 10; //给圆对象的半径 进行赋值操作

	//2 * pi * 10 = = 62.8
	cout << "圆的周长为: " << c1.calculateZC() << endl;

	system("pause");

	return 0;
}

示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号

示例2代码:

//学生类
class Student {
public:
	void setName(string name) {
		m_name = name;
	}
	void setID(int id) {
		m_id = id;
	}

	void showStudent() {
		cout << "name:" << m_name << " ID:" << m_id << endl;
	}
public:
	string m_name;
	int m_id;
};

int main() {

	Student stu;
	stu.setName("jk");
	stu.setID(250);
	stu.showStudent();

	system("pause");

	return 0;
}

注意:

1、类中的属性和行为统称为 成员

2、属性-->成员属性/变量

​ 行为-->成员函数/方法

3、在写C++中的类时,我们也可以提供接口供外部修改类中的成员属性

类似于Java(详见

封装意义二

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

访问权限有三种:

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

示例:

//三种权限
//公共权限  public     类内可以访问  类外可以访问
//保护权限  protected  类内可以访问  类外不可以访问
//私有权限  private    类内可以访问  类外不可以访问

class Person
{
	//姓名  公共权限
public:
	string m_Name;

	//汽车  保护权限
protected:
	string m_Car;

	//银行卡密码  私有权限
private:
	int m_Password;

public:
	void func()
	{
		m_Name = "张三";
		m_Car = "拖拉机";
		m_Password = 123456;
	}
};

int main() {

	Person p;
	p.m_Name = "李四";
	//p.m_Car = "奔驰";  //保护权限类外访问不到
	//p.m_Password = 123; //私有权限类外访问不到

	system("pause");

	return 0;
}

struct和class区别

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

区别:

  • struct 默认权限为公共
  • class 默认权限为私有
class C1
{
	int  m_A; //默认是私有权限
};

struct C2
{
	int m_A;  //默认是公共权限
};

int main() {

	C1 c1;
	c1.m_A = 10; //错误,访问权限是私有

	C2 c2;
	c2.m_A = 10; //正确,访问权限是公共

	system("pause");

	return 0;
}

成员属性设置为私有

优点1:将所有成员属性设置为私有,可以自己控制读写权限

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

示例:

class Person {
public:

	//姓名设置可读可写
	void setName(string name) {
		m_Name = name;
	}
	string getName()
	{
		return m_Name;
	}


	//获取年龄 
	int getAge() {
		return m_Age;
	}
	//设置年龄
	void setAge(int age) {
		if (age < 0 || age > 150) {
			cout << "你个老妖精!" << endl;
			return;
		}
		m_Age = age;
	}

	//情人设置为只写
	void setLover(string lover) {
		m_Lover = lover;
	}

private:
	string m_Name; //可读可写  姓名
	
	int m_Age; //只读  年龄

	string m_Lover; //只写  情人
};


int main() {

	Person p;
	//姓名设置
	p.setName("张三");
	cout << "姓名: " << p.getName() << endl;

	//年龄设置
	p.setAge(50);
	cout << "年龄: " << p.getAge() << endl;

	//情人设置
	p.setLover("JK");
	//cout << "情人: " << p.m_Lover << endl;  //只写属性,不可以读取

	system("pause");

	return 0;
}

注:

1、一般在写class时,成员属性都做成私有的

2、可以在class中提供获取成员属性的方法(都写为public),供外部访问类内属性(对比Java

练习:立方体类

设计立方体类(Cube)

求出立方体的面积和体积

分别用全局函数和成员函数判断两个立方体是否相等。

image-20230126113632386

#include<iostream>
using namespace std;
#include<string> 

class Cube {
public:
	//设置长宽高
	void setL(int l) {
		m_L = l;
	}

	void setW(int w) {
		m_W = w;
	}

	void setH(int h) {
		m_H = h;
	}
	//获取长宽高
	int getL() {
		return m_L;
	}
	int getW() {
		return m_W;
	}
	int getH() {
		return m_H;
	}

	//计算面积
	int calculateS() {
		return 2 * m_L * m_W + 2 * m_W * m_H + 2 * m_L * m_H;
	}

	//计算体积
	int calculateV() {
		return m_L * m_W * m_H;
	}

	//利用成员函数判断两个立方体是否相等
	bool isSameByClass(Cube &c){
		if (m_L == c.getL() && m_H == c.getH() && m_W == c.getW()) {
			return true;
		}
		return false;

	}

private:
	//长
	int m_L;
	//宽
	int m_W;
	//高
	int m_H;
};

//在全局函数判断两立方体是否相等
//通过引用方式传递
bool isSame(Cube &c1, Cube& c2) {
	if (c1.getL() == c2.getL() && c1.getH() == c2.getH() && c1.getW() == c2.getW()) {
		return true;
	}
	return false;
}

int main() {
	//创建立方体
	Cube c1;
	c1.setL(10);
	c1.setH(10);
	c1.setW(10);

	cout << "c1的面积:" << c1.calculateS() << endl;
	cout << "c1的体积:" << c1.calculateV() << endl;

	Cube c2;
	c2.setL(10);
	c2.setH(10);
	c2.setW(10);


	bool ret = isSame(c1, c2);
	if (ret) {
		cout << "相等" << endl; 
	}else {
		cout << "不等" << endl;
	}

	bool ret2 = c1.isSameByClass(c2);
	if (ret2) {
		cout << "(成员)相等" << endl;
	}
	else {
		cout << "(成员)不等" << endl;
	}

	system("pause");
	return 0;
}

标签:01,return,int,C++,OOP,c1,权限,class,属性
From: https://www.cnblogs.com/DAYceng/p/17067611.html

相关文章

  • C/C++校友管理系统[2023-01-26]
    C/C++校友管理系统[2023-01-26]问题描述设计一个数智学院校友管理系统,设置管理员、校友两个角色。实现校友注册与管理、学校新闻发布与查看,问卷调查功能。基本功能要求:......
  • C语言学生信息管理系统[2023-01-26]
    C语言学生信息管理系统[2023-01-26]第33题学生信息管理系统【涉及知识点】文件的定义和操作;使用文本构建菜单;函数的选择调用;数据的输入输出。【题目介绍】学生......
  • C/C++学生成绩管理系统[2023-01-26]
    C/C++学生成绩管理系统[2023-01-26]设某班有n位同学,每位同学的数据包括以下内容:学号(长整型)、姓名(字符串)、数学成绩(整型)、程序设计成绩(整型)。设计程序完成以下功能:新建数据......
  • C/C++数据结构课程设计[2023-01-26]
    C/C++数据结构课程设计[2023-01-26]数据结构课程设计第18周(12月26日——12月30日)题目设定:T1:全国交通咨询模拟T2:自拟题目选择其中一题完成!考核办法与成绩评定1......
  • C/C++租房信息管理程序[2023-01-26]
    C/C++租房信息管理程序[2023-01-26]4、租房信息管理程序题目要求:设计三个类:房屋类、租客类、租房登讫信息类。房居类用来存储房屋的信息,租客类用来存储租客的信息,租房登......
  • C++迷宫求解[2023-01-26]
    C++迷宫求解[2023-01-26](四)迷宫求解(****)1****、问题描述:以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个C++语言程序,对任意设定的迷宫,求出一条从入......
  • 【奇妙的数据结构世界】用图像和代码对链表的使用进行透彻学习 | C++
    第九章链表:::hljs-center目录第九章链表●前言●一、链表是什么?1.简要介绍2.具体情况●二、链表操作的关键代码段1.类型定义2.常用操作●总结:::......
  • C++多行文件
    #include<iostream>#include<string>intmain(){std::stringjsonStr=R"delimiter({"name":"James","nickname":"goodboy......
  • C++ 和 Java 的区别(A C++ programmer's perspective)
    C++开发,周末看了2天Java教程,直接上手写Java。说下自己最明显的感受,用的不多,理解不一定对:【JVM】Java编译+解释,运行在JVM,跨平台移植方便,但执行速度/效率比C++低......
  • 读Java8函数式编程笔记01_Lambda表达式
    1. Java8函数式编程1.1. 没有单子1.2. 没有语言层面的惰性求值1.3. 没有为不可变性提供额外支持1.4. 集合类可以拥有一些额外的方法:default方法2. 现实世界中......