C++学习(8)—— 封装
C++面向对象的三大特性:封装、继承、多态
C++认为万事万物都可以为对象,对象上有其属性和行为
具有相同性质的对象,可以抽象为类
1. 封装的意义
封装是C++面向对象三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以控制
- 封装意义一:
在设计类的时候,属性和行为写在一起,表现事物
语法:class 类名{访问权限:属性 / 行为};
示例1:设计一个圆类,求圆的周长
#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;
cout << "圆的周长为:" << c1.calculateZC() << endl;
return 0;
}
示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
#include<iostream>
#include<string>
using namespace std;
class Student{
//访问权限
public:
string s_name;
string s_id;
void showStudent(){
cout << "姓名:" << s_name << "\n学号:" << s_id << endl;
}
void setName(string name){
s_name = name;
}
};
int main(){
//实例化对象
Student s1;
//s1.s_name = "张三";
s1.setName("张三");
s1.s_id = "001";
s1.showStudent();
Student s2;
s2.s_name = "李四";
s2.s_id = "002";
s2.showStudent();
return 0;
}
- 封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限
- protected 保护权限
- 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; //银行卡密码
public:
void func(){
m_Name = "张三";
m_car = "奔驰";
m_Password = 123456;
}
};
int main(){
Person p1;
p1.m_Name = "李四";
//p1.m_car = "宝马";
//p1.m_Password = 123;
return 0;
}
2. struct和class区别
在C++中struct和class唯一的区别就在于默认的访问权限不同
区别:
- struct默认权限为公共
- class默认权限为私有
#include<iostream>
#include<string>
using namespace std;
class C1{
int m_A;
};
struct C2{
int m_A;
};
int main(){
C1 c1;
//c1.m_A = 100;
C2 c2;
c2.m_A = 200;
return 0;
}
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;
}
//读年龄
int getAge(){
return m_Age;
}
//写年龄————————有效性验证
void setAge(int age){
if(age < 0 || age > 150){
cout << "年龄范围错误" << endl;
return ;
}
m_Age = age;
}
//写爱人
void setLover(string name){
m_Lover = "NoBody";
}
private:
string m_Name; //姓名 可读可写
int m_Age = 20; //可读可写,但范围必须在0~150之间
string m_Lover; //只写
};
int main(){
Person p;
p.setName("张三");
cout << "姓名为:" << p.getName() << endl;
return 0;
}
C++学习(8)—— 封装的更多相关文章
- Canvas学习:封装Canvas绘制基本图形API
Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习 从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方 ...
- C#学习笔记-封装
前言 说起来惭愧,学了大半年的C#,其实最开始就接触到了封装的部分,但是一直模模糊糊的弄不清楚,也觉得没什么影响就没怎么在意,现在才开始认真的看这部分内容,看懂了过后好多东西清晰了不少,才发现封装这个 ...
- 【C语言学习】封装和模块化思想
刚学习完C后,做的关于C的课程设计是在一个源文件里放了几百行代码,并且各个功能之间都是相互依赖的,这样就会非常麻烦. 由于当我要改动某个地方的时候,就会牵连着要改动喝多的地方.而在实际的程序设计中.这 ...
- C++学习笔记 封装 继承 多态 重写 重载 重定义
C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...
- Java学习笔记——封装、继承和多态
先说说封装: 用new 一条狗来举个例子: public class Dog { //私有化字段 private String name; private int age; //无参构造 Dog(){ ...
- Java学习之封装
Java是一种面向对象的编程语言,对于面向对象的编程语言中有一种思想叫做封装. 封装是一种很重要的思想,今天在看教学视频时,觉得视频中的例子很好的解释了封装的重要性,能够提高程序的健壮性. 视频中以人 ...
- Python+Pycharm—学习1—封装&导入
一.封装 目的: 写了一个复杂功能的实现,下次有相同的需求时可以直接导入这个包来使用.就可以达到复用的目的了.通俗的来讲就是打包.(以下用四则运算举例) 方案: 1.1.新建python工程,新建一个 ...
- Programming With Objective-C---- Encapsulating Data ---- Objective-C 学习(三) 封装数据
Programming with Objective-C Encapsulating Data In addition to the messaging behavior covered in t ...
- python学习-class封装
# 封装 类=属性+行为 抽像 -class StudentV2: # 类属性 所有的实例可以共享 .不属于任何实例的特性. is_people = True # 类方法 1.装饰器.2.参数是cls ...
- PHP面向对象的学习(封装,继承,多态)
这个文章就是记录 巩固一下PHP的面向对象的部分 ,无非就是封装,继承,多态等等这几部分 这里参考了一位大佬总结的文章:https://www.cnblogs.com/adaia/p/6986576 ...
随机推荐
- SpringMVC之使用ResponseEntity
1.Post请求 一般情况下,在非必须的情况下,使用Jquery实现post请求,而后台返回一般都需要手动封装ResponseUtil,和使用@ResponseBody注解来实现返回.然而我们书上学到 ...
- centos7.5 搭建上FTP服务
1.安装FTP # 查看ftp 是否安装 rpm -qa | grep vftpd # 安装vsftp yum install -y vsftpd # 设置ftp 开机启动 systemctl ena ...
- Linux 系统开机时间及当前时间
最近一次系统开机时间:date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M ...
- barbor部署
harbor 部署介绍: 1.版本信息 系统 :Centos 7.5 版本: harbor-offline-installer-v1.8.1 docker :docker-ce-18.06.2.ce- ...
- Linux 下配置 iSCSI 客户端
安装客户端软件 Redhat/Centos: yum install -y iscsi-initiator-utils Debian/Ubuntu: apt-get install open-iscs ...
- 5 系统的软中断CPU升高,一般处理办法?
还是需要多动手,一个一个问题个被get!
- Centos 6.8 公钥登录
# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch Distrib ...
- [转帖]从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑?
从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑? 2019-10-08 10:26:28 阿里云云栖社区 阅读数 54 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权 ...
- latex中添加C++代码
用到listings宏包,模板如下: \documentclass[UTF8]{ctexart} \usepackage[a4paper,top=2cm,bottom=2cm,left=2cm,rig ...
- Kafka Internals: Consumers
Check out my last article, Kafka Internals: Topics and Partitions to learn about Kafka storage inter ...