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. Android Q Beta 6 终极测试版发布!

    前言 当今手机市场可谓是百花齐放,但手机系统却屈指可数,其中Android和iOS就占据了整个手机系统市场的99%,单单Android就占据了整个手机系统市场的86%,可谓是占据绝对优势.     其 ...

  2. Java实现添加压缩文件

    package junittest; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStr ...

  3. Linux安装vim,解决vim: command not found

    1,输入rpm -qa|grep vim 命令, 如果 vim 已经正确安裝,会返回下面的三行代码: root@server1 [~]# rpm -qa|grep vim vim-enhanced-7 ...

  4. 【p6spy学习之一】p6spy使用

    一.介绍 p6spy是一个开源项目,通常使用它来跟踪数据库操作,查看程序运行过程中执行的sql语句.1.原理 p6spy将应用的数据源给劫持了,应用操作数据库其实在调用p6spy的数据源,p6spy劫 ...

  5. Spring通过注解获取所有被注解标注的Beans

    Spring提供的方法:Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annot ...

  6. Vim 入门教程

    Vim 入门教程 转载请保留以上信息 Vim 的教程相对比较零散,系统的教程比较少,我也阅读过不少教程,走过很 多弯路.借着 Vim-china 组织组建这一契机,整理下自己学习过的内容, 分享给大家 ...

  7. 用 LinkedList 实现一个 java.util.Stack 栈

    用 LinkedList 实现一个 java.util.Stack 栈 import java.util.LinkedList; public class Stack<E> { priva ...

  8. 如何从0搭建node服务

    第一步 首先要搭一个node服务 基于 express 来快速构建node服务 npm install express 安装express 新建一个项目 myapp npm install expre ...

  9. cmake 配置

    罗列一下cmake常用的命令.CMake支持大写.小写.混合大小写的命令. 1. 添加头文件目录INCLUDE_DIRECTORIES 语法:include_directories([AFTER|BE ...

  10. Debian Stretch升级当前最新稳定版内核

    Why update kernel ? Update the kernel to new version fixed some newer hardware has no driver softwar ...