返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >带你从头学习C++的封装
  • 940
分享到

带你从头学习C++的封装

2024-04-02 19:04:59 940人浏览 泡泡鱼
摘要

目录封装属性和行为作为整体 实例—设计学生类访问权限class与struct区别成员属性私有化设计立方体类总结封装 c++认为万事万物皆为对象,对象上有其属性和

封装

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

封装的意义:

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

 封装意义一:

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

语法:

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

属性和行为作为整体

#include<iOStream>
using namespace std;
//圆周率
const double PI = 3.14;
//设计一个圆类,求圆的周长
//圆求周长的公式:2*PI*半径
class Circle {
	//访问权限
	//公共权限
public:
 		//属性
		//半径
 		int m_r;
	//行为
	//获取圆的周长
		double calculateZC() {
			return 2 * PI * m_r;
		}
};
 int main() {
	//通过圆类,创建具体的圆(对象)
	//实例化  (通过一个类 创建一个对象的过程)
	Circle c1;
	//给圆对象的属性进行赋值
	c1.m_r = 10;
	//2 * PI * m_r = 62.8;
	cout << "圆的周长为:" << c1.calculateZC () << endl;
	system("pause");
	return 0;
}

 实例—设计学生类

#include<iostream>
using namespace std;
//#include<string>
//设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
//设计学生类
class Student {
public://公共权限
	//类中的属性和行为 我们统一称为 成员
	//属性 成员属性 成员变量
	//行为 成员函数 成员方法
 	//属性
	string m_Name;//姓名
	int m_Id;//学号
	//行为
	//显示姓名和学号
	void showStudent() {
		cout << "姓名:" << m_Name << "  学号:"<<m_Id << endl;
	}
	//给姓名赋值
	void setName(string name) {
		m_Name = name;
	}
	void setId(int Id) {
		m_Id = Id;
	}
};
int main() {
	//创建一个具体的学生  实例化对象
	Student s1;
	//给s1对象进行属性赋值操作
	//s1.m_Name = "张三";
	s1.setName("张三");
	//s1.m_Id = 1;
	s1.setId(1);
	s1.showStudent();
 	Student s2;
	s2.m_Name = "李四";
	s2.m_Id = 2;
	s2.showStudent();
	system("pause");
	return 0;
}

访问权限

封装意义二:

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

权限访问有三类:

  • public         公共权限
  • protected    保护权限
  • private        私有权限
#include<iostream>
using namespace std;
//访问权限
//三种
//公共权限 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 p1;
	p1.m_Name = "李四";
	//p1.m_Car = "奔驰";//保护权限的内容,在类外访问不到
	//p1.m_Password = 123;//私有权限的内容,在类外访问不到
   	system("pause");
	return 0;
}

class与struct区别

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

区别:

  • struct默认权限为公共
  • class默认权限为私有
#include<iostream>
using namespace std;
class C1 {
 	int m_A;//默认权限 是私有
};
struct C2 {
	int m_A;//默认权限 是公共
};
int main() {
	//struct和class区别
	//struct 默认权限是 公有 public
	//class  默认权限是 私有 private
	C1 c1;
	//c1.m_A = 100;//在class里默认权限 私有,因此类外不可以访问
 	C2 c2;
	c2.m_A = 100;//在struct默认的权限为公共,因此可以访问
	system("pause");
	return 0;
}

成员属性私有化

  • 优点1:将所有成员属性设为私有,可以自己控制读写权限
  • 优点2:对于写权限,我们可以检测数据的有效性
#include<iostream>
using namespace std;
#include<string>
//成员属性设置为私有
//1.可以自己控制读写权限
//2.可以写可以检验数据的有效性
//设计人类
class Person {
public:
	//设置姓名
	void setName(string name) {
		m_Name = name;
	}
	//获取姓名
	string getName() {
		return m_Name;
	}
	//获取年龄  只读
	int getAge() {
		//m_Age = 0;//初始化零岁
		return m_Age;
	}
	void setAge(int age) {
		if (age < 0 || age>150) {
			m_Age = 0;
			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.m_Age = 18;
	//p.setAge(18);
	p.setAge(18);
	cout << "年龄为:" << p.getAge() << endl;
	//设置情人为苍井女士
	p.setLover("苍井");
	//cout<<"情人为:"<<p.m_Lover << endl;只写权限,数据不可以访问到的
 	system("pause");
	return 0;
}

设计立方体类

#include<iostream>
using namespace std;
//立方体类设计
//1.创建立方体类
//2.设计属性
//3.设计行为 获取立方体面积和体积
//4.分别利用全局函数和成员函数 判断两个立方体是否相等
 class Cube {
public:
	//行为
	// 设置长
	void setL(int l) {
		m_L = l;
	}
	// 获取长
	int getL() {
		return m_L;
	}
	// 设置宽
	void setW(int w) {
		m_W =w ;
	}
	// 获取宽
	int getW() {
		return m_W;
	}
	// 设置高
	void setH(int h) {
		m_H = h;
	}
	// 获取高
	int getH() {
		return m_H;
	}
	// 获取立方体面积
	int calculateS() {
		return 2 * m_L * m_W + 2 * m_L * m_H + 2 * m_W * m_H;
	}
	// 获取立方体体积
	int calculateV() {
		return m_L * m_W * m_H;
	}
	//利用成员函数判断两个立方体是否相等
	bool isSameByClass(Cube &c) {
		if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH()) {
			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.getW() == c2.getW() && c1.getH() == c2.getH()) {
		return true;
	}
	return false;
}
int main() {
	//创建立方体对象
	Cube c1;
	c1.setL(10);
	c1.setW(10);
	c1.setH(10);
	cout << "c1的面积为:" <<c1.calculateS() << endl;
	cout << "c1的体积为:" << c1.calculateV() << endl;
	//创建第二个立方体
	Cube c2;
	c2.setL(10);
	c2.setW(10);
	c2.setH(10);
 	//利用全局函数判断
	bool ret = isSame(c1,c2);
	if (ret) {
		cout << "c1和c2是相等的" << endl;
	}
	else {
		cout << "c1和c2是不相等的" << endl;
	}
	//利用成员函数判断
	ret = c1.isSameByClass(c2);
	if (ret) {
		cout << "成员函数判断的:c1和c2是相等的" << endl;
	}
	else {
		cout << "成员函数判断的:c1和c2是不相等的" << endl;
	}
	system("pause");
	return 0;
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!     

--结束END--

本文标题: 带你从头学习C++的封装

本文链接: https://lsjlt.com/news/138452.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 带你从头学习C++的封装
    目录封装属性和行为作为整体 实例—设计学生类访问权限class与struct区别成员属性私有化设计立方体类总结封装 c++认为万事万物皆为对象,对象上有其属性和...
    99+
    2024-04-02
  • c#基础学习之封装
    作为一个初级GIS程序员,关于封装那些宏观的概念暂且不提,编程经常面对的就是“字段,属性,方法”,这也是面向对象的基本概念之一。 1.字段 通常定义为private,表示类的状态信息...
    99+
    2022-11-15
    c# 封装
  • C++学习之cstdbool和cstddef头文件封装源码分析
    目录引言stdbool.hcstdbool实现C语言的原生实现stdbool.h小结stddef.h常量NULL的定义类型的定义offsetof宏引言 cstdbool是C++对st...
    99+
    2024-04-02
  • 从头学习C语言之二维数组
    目录二维数组:语法:二维数组存放方式:二维数组的访问:二维数组的初始化:示例:总结二维数组: 引入一个想法: 一个变量:相当于一个点。 一维数组(也就是数组):点汇聚成为一条直线。 ...
    99+
    2024-04-02
  • 一文带你学习C++中的虚函数
    目录概念语法使用总结概念 虚函数是一种具有特殊属性的成员函数,它可以被子类重写,并在运行时确定调用哪个方法。为了定义一个虚函数,将在该函数的声明中使用关键字virtual。当调用一个...
    99+
    2023-05-19
    C++虚函数 C++函数
  • 手把手带你学习C++的运算符
    目录运算符01 算术运算符02 赋值运算符03 比较运算符04 逻辑运算符总结运算符 作用:用于执行代码的运算 运算符类型 ...
    99+
    2024-04-02
  • 一文带你学习C/C++中的<Windows.h>库
    目录前言(1)cls(2)pause(3)(4)关机开机不必多说。(5)color XX总结前言 众所周知,C++里有一个语句system,那么他究竟有什么用呢?我们来看一看吧。 s...
    99+
    2023-01-11
    c++ windows.h库 C++ windows.h C语言Windows.h
  • 从头学习C语言之if语句的使用
    目录if语句:if语句的三种基本形式。1示例2.示例3.示例课堂实践环节:总结if语句: 作用: 构成分支结构。(它根据给定的条件进行判断,以决定执行某个分支程序段。) if语句的三...
    99+
    2024-04-02
  • 一文带你学习C++析构函数
    目录C++析构函数的学习析构函数的基本使用多个析构函数的使用继承中的析构函数总结C++析构函数的学习 在C++中,析构函数是一种特殊类型的成员函数,用于在对象生命周期结束时被自动调用...
    99+
    2023-05-19
    C++析构函数的使用 C++析构函数学习 C++析构函数 C++ 函数
  • 从头学习C语言之指针和数组
    目录指针和数组:示例:总结指针和数组: 数组名其实是数组第一个元素的地址。 %p用来打印地址,为十六进制 &:取址操作符 如果用一个指针指向数组,应该怎么做呢? char ...
    99+
    2024-04-02
  • 一文带你学习C++中的派生机制
    目录一、派生的类型二、派生的语法三、多重继承四、虚继承五、派生类和基类的关系六、总结C++是一门面向对象的编程语言,其中的派生机制是其重要的面向对象特性之一。派生是建立在现有类的基础...
    99+
    2023-05-15
    C++派生机制应用 C++派生机制 C++派生
  • 手把手带你学习C++的数据类型
    目录数据类型01 整型:02 sizeof关键字03 实型(浮点型)04 字符型05 转义字符06 字符串型07 布尔型08 数据的输入总结 数据类型 C++规定在创建一个变量或者常...
    99+
    2024-04-02
  • 从头学习C语言之字符串处理函数
    目录字符串处理函数:存放和使用字符串:获取字符串长度:strlen示例:拷贝字符串:strcpy和strncpy示例:strncpy:示例:连接字符串:strcat和strncat示...
    99+
    2024-04-02
  • 一文带你学习一下C++中的构造函数
    目录C++构造函数学习1.带参数的构造函数2.多个构造函数3.拷贝构造函数C++构造函数学习 构造函数是一种特殊的函数,它用于在创建对象时初始化对象的值。所有的类都有构造函数,但如果...
    99+
    2023-05-19
    C++构造函数的使用 C++构造函数学习 C++构造函数 C++ 函数
  • 从头学习C语言之for语句和循环嵌套
    目录for语句:前言:注意事项:语句形式:执行顺序:示例:循环嵌套:语句形式:流程图:示例:总结for语句: 前言: 循环的基本结构离不开三个基本动作: 初始化计数器循环条件更新计数...
    99+
    2024-04-02
  • 从头学习C语言之switch语句和分支嵌套
    目录switch 语句:注意事项:分支结构的嵌套:注意事项:语句形式:流程图:示例:总结switch 语句: 一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一...
    99+
    2024-04-02
  • 带你学习Golang的继承与实现
    Golang是一门功能丰富的编程语言。它的面向对象编程方式是通过结构体实现的。在Golang中,继承可以使用结构体嵌入实现,同时Golang也提供了一些实现继承的方法。在这篇文章中,我们将学习Golang的继承与实现。继承继承是实现面向对象...
    99+
    2023-05-14
  • 一文带你学习Java中的线程
    目录介绍线程通用的线程生命周期Java 的线程生命周期Java 的线程状态切换从 NEW 到 RUNNABLE 状态从 RUNNABLE 到 TERMINATED 状态1. RUNN...
    99+
    2023-05-20
    Java 线程 Java线程总结
  • 用 Python 机器学习从零到一:手把手带你掌握机器学习的基本原理
    1. 什么是机器学习? 机器学习是人工智能的一个分支,旨在让计算机能够像人类一样学习和思考。机器学习算法能够从数据中学习到规律,并利用这些规律进行预测或决策。 2. 机器学习的基本原理 机器学习算法的基本原理是通过数据训练模型,然后利用...
    99+
    2024-02-14
    Python 机器学习 基础原理 数据预处理 模型训练 评估预测
  • 从头学习:掌握Go语言的基础知识
    从零开始:学习Go语言的基础知识 简介 Go语言,又称Golang,是一种由Google开发的开源编程语言。它于2009年发布,并迅速成为一种流行的语言,尤其是在Web开发、分布式系统和云计算等领域。Go语言...
    99+
    2024-02-01
    学习 go语言 基础知识 键值对
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作