前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ | 面向对象之“封装”简述

C++ | 面向对象之“封装”简述

作者头像
飞哥
发布2020-08-05 14:48:02
3350
发布2020-08-05 14:48:02
举报

众所周知,C++是一门面向对象的语言,相对于面向过程的C语言,面向对象有时候有自己的优势,今天就讲一下面向对象的三大特性之一——封装。

面向对象的思想当中,将所有事物抽象为一个个的类,每个类有自己的属性和行为,比如人类,可以理解为人类的属性有头发、眼睛、四肢等等,行为有走路、唱歌等等等。这种思想在编程当中有时候很方便。

封装的意义1:在设计类的时候,属性和行为写在一起,表现事物。

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

示例:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号。

代码语言:javascript
复制
//学生类
class Student {
public:
  void setName(string name) {
    m_name = name;
  }
  void setID(int id) {
    m_id = id;
  }

  void showStudent() {
    cout << "name:" << m_name << " ID:" << m_id << endl;
  }
public:
  string m_name;
  int m_id;
};

int main() {

  Student stu;
  stu.setName("德玛西亚");
  stu.setID(250);
  stu.showStudent();

  system("pause");

  return 0;
}

封装的意义2:类在设计时,可以把属性和行为放在不同的权限下,加以控制。

访问权限有三种:

  1. public 公共权限 ,类内可以访问 类外可以访问
  2. protected 保护权限,类内可以访问 类外不可以访问
  3. private 私有权限,类内可以访问 类外不可以访问

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

区别:

  • struct 默认权限为公共
  • class 默认权限为私有

通常我们将成员属性设置为私有,这样有两个优点:

优点1:将所有成员属性设置为私有,可以自己控制读写权限。

优点2:对于写权限,我们可以检测数据的有效性。

示例:

代码语言:javascript
复制
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 << "error!" << endl;
      return;
    }
    m_Age = age;
  }

private:
  string m_Name; //可读可写  姓名
  int m_Age; //只读  年龄
};

int main() {

  Person p;
  //姓名设置
  p.setName("张三");
  cout << "姓名:" << p.getName() << endl;

  //年龄设置
  p.setAge(50);
  cout << "年龄: " << p.getAge() << endl;

  system("pause");

  return 0;
}

在这个代码里面,姓名和年龄都是私有属性,类外是不可以访问的,但是类里面的接口函数是公共权限,可以通过这些函数接口来访问,这样的一个好处是这些属性不会轻易被非法修改,只能通过接口函数来间接读或写,提高了安全性。

好了,这里只是初步的介绍了面向对象的封装,后面将会深入研究面向对象的其他特性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子技术研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档