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

C++认为万事万物都可以为对象,对象上有其属性行为

具有相同性质的对象,可以抽象为类

1. 封装的意义

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

封装的意义:

  • 将属性和行为作为一个整体,表现生活中的事物
  • 将属性和行为加以控制
  1. 封装意义一:

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

语法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;
}
  1. 封装意义二:

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

访问权限有三种:

  • 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)—— 封装的更多相关文章

  1. Canvas学习:封装Canvas绘制基本图形API

    Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习   从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方 ...

  2. C#学习笔记-封装

    前言 说起来惭愧,学了大半年的C#,其实最开始就接触到了封装的部分,但是一直模模糊糊的弄不清楚,也觉得没什么影响就没怎么在意,现在才开始认真的看这部分内容,看懂了过后好多东西清晰了不少,才发现封装这个 ...

  3. 【C语言学习】封装和模块化思想

    刚学习完C后,做的关于C的课程设计是在一个源文件里放了几百行代码,并且各个功能之间都是相互依赖的,这样就会非常麻烦. 由于当我要改动某个地方的时候,就会牵连着要改动喝多的地方.而在实际的程序设计中.这 ...

  4. C++学习笔记 封装 继承 多态 重写 重载 重定义

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  5. Java学习笔记——封装、继承和多态

    先说说封装: 用new 一条狗来举个例子: public class Dog { //私有化字段 private String name; private int age; //无参构造 Dog(){ ...

  6. Java学习之封装

    Java是一种面向对象的编程语言,对于面向对象的编程语言中有一种思想叫做封装. 封装是一种很重要的思想,今天在看教学视频时,觉得视频中的例子很好的解释了封装的重要性,能够提高程序的健壮性. 视频中以人 ...

  7. Python+Pycharm—学习1—封装&导入

    一.封装 目的: 写了一个复杂功能的实现,下次有相同的需求时可以直接导入这个包来使用.就可以达到复用的目的了.通俗的来讲就是打包.(以下用四则运算举例) 方案: 1.1.新建python工程,新建一个 ...

  8. Programming With Objective-C---- Encapsulating Data ---- Objective-C 学习(三) 封装数据

      Programming with Objective-C Encapsulating Data In addition to the messaging behavior covered in t ...

  9. python学习-class封装

    # 封装 类=属性+行为 抽像 -class StudentV2: # 类属性 所有的实例可以共享 .不属于任何实例的特性. is_people = True # 类方法 1.装饰器.2.参数是cls ...

  10. PHP面向对象的学习(封装,继承,多态)

    这个文章就是记录  巩固一下PHP的面向对象的部分 ,无非就是封装,继承,多态等等这几部分 这里参考了一位大佬总结的文章:https://www.cnblogs.com/adaia/p/6986576 ...

随机推荐

  1. c++隐式转换(implicit conversion)

    1.缘由 最近在使用nlohmann的json,发现有些地方不是特别好用,所以就想自己修改一下(目的是为了增加类似jsoncpp中可以//增加注释的功能),在看源码的时候看到了一个迷惑的地方,就是解析 ...

  2. 利用docker实现私有镜像仓库

    利用docker实现私有镜像仓库 在linux服务器上安装了docker过后,可以拉取docker镜像仓库: docker pull registry 再执行命令让镜像run起来: docker ru ...

  3. activiti学习7:spring和activiti进行整合

    目录 activiti学习7:spring和activiti进行整合 一.整合原理 二.整合步骤 2.1 新建一个maven工程并导入相关依赖 2.2 创建spring配置文件 三.测试 activi ...

  4. putty常用配置修改

    1.修改putty默认的颜色方案 初次使用putty时,发现默认的配色的方案看得非常难受,特别是黑色背景,深蓝色的字体,根本看不清楚,下面介绍如何更改默认的配色方案: (1)下载配置文件 首先下载注册 ...

  5. LPAT: Learning to Predict Adaptive Threshold for Weakly-supervised Temporal Action Localization [Paper Reading]

    Motivation: 阈值分割的阈值并没有通过模型训练学出来,而是凭借主观经验设置,本文通过与背景得分比较提取对应的proposal,不用阈值的另一篇文章是Shou Zheng的AutoLoc,通过 ...

  6. 【C语言学习笔记】指针

    用来存放一个变量地址的变量就叫指针变量.指针变量也是有类型约束的,一般什么类型的指针指向什么类型的变量. 指针之所以叫变量,是因为它里面所存放的变量的地址也是不断变化的,指针是可以移动的. 定义格式: ...

  7. python实现根据前序与中序求后序

    我就不板门弄斧了求后序 class Tree(): def __init__(self,x): self.value=x self.left=None self.right=None class So ...

  8. C库函数strstr分析

    C标准库<string.h> 函数声明: char* strstr(char* const _String, char const* const _SubString) 返回值: SubS ...

  9. Python协程介绍(转)

    原文:https://www.liaoxuefeng.com/wiki/897692888725344/923057403198272 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很 ...

  10. SpringBootSecurity学习(18)前后端分离版之 OAuth2.0 数据库(MyBatis)存储客户端

    使用Mybatis查询客户端信息 前面的例子使用了默认的jdbc配置来动态从数据库查询客户端信息,下面来改用更加灵活的mybatis来实现,改用mybatis,首先pom中换成mybatis的依赖: ...