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 ...
随机推荐
- 设计模式主目录 C++实现
行为性模式 1.观察者模式 结构型模式 ---- 组合的艺术 1.外观模式
- centos里的压缩解压命令tar总结
压缩 tar czvf 压缩文件名称.tar.gz 文件或者目录名称 比如:tar czvf backup.tar.gz /etc,把/etc目录打包成文件backup.tar.gz c是打包 z是g ...
- 使用stunnle加密传输
Stunnel是一个可以用SSL对任意 TCP 连接加密的程序.它可以运行在多种UNIX和Windows上,它是基于 OpenSSL的,所以它要求已经安装了 OpenSSL,并进行了正确的配置.——来 ...
- odoo13 searchpanel tree
<record id="view_department_filter" model="ir.ui.view"> <field name=&qu ...
- php-微信分享签名
//测试 $APPID='*************************'; $SECRET='***********************'; $url = trim($_REQUEST['u ...
- vivado sdx 綜合報錯ERROR: [SdsCompiler 83-5019] Exiting sds++ : Error when calling 'aarch64-linux-gnu-g++ -c
ERROR: [SdsCompiler 83-5019] Exiting sds++ : Error when calling 'aarch64-linux-gnu-g++ -c 主函數 添加 頭文件 ...
- maven添加本地包命令mvn install:install-file
mvn install:install .jar -Dfile:要注册的jar,绝对路径
- B/S架构详解
学习笔记: * B/S架构详解 * 资源分类: 1. 静态资源: * 使用静态网页开发技术发布的资源. * 特点: ...
- c# winform结合数据库动态生成treeview的父节点和子节点方法和思路
tb_food表的结构如图一: tb_foodtype表的结构如图二: //获取tb_foodtype表中的所有数据 private void InitDataTable() { SqlConnect ...
- 聊聊Golang逃逸分析
逃逸分析的概念,go怎么开启逃逸分析的log. 以下资料来自互联网,有错误之处,请一定告之. 什么是逃逸分析 wiki上的定义 在编译程序优化理论中,逃逸分析是一种确定指针动态范围的方法——分析在程序 ...