C++深入讲解类与封装的概念与使用

 更新时间:2022年04月20日 16:57:45   作者:清风自在 流水潺潺  
我们都知道C++有三大特性:封装、继承、多态,现在我们来总结一下封装的相关知识与类的概念,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

一、类的组合

电脑一般而言是由 CPU,内存,主板,键盘和硬盘等部件组合而成。

二、类的封装

类通常分为以下两个部分

  • 类的实现细节
  • 类的使用方式

  • 当使用类时,不需要关心其实现细节
  • 当创建类时,才需要考虑其内部实现细节

例:

普通用户使用手机

  • 只需要学习如何发短信,打电话,拍照,等等

手机开发工程师

  • 需要考虑手机内部的实现细节

封装的基本概念

根据经验:并不是类的每个属性都是对外公开的

  • 如:女孩子不希望外人知道自己的体重和年龄
  • 如:男孩子不希望别人知道自己的身高和收入

而一些类的属性是对外公开的

  • 如:人的姓名,学历,国籍,等

必须在类的表示法中定义属性和行为的公开级别

  • 类似文件系统中文件的权限

C++中类的封装

  • 成员变量:C++中用于表示类属性的变量
  • 成员函数:C++中用于表示类行为的函数
  • C++中可以给成员变量和成员函数定义访问级别

public

  • 成员变量和成员函数可以在类的内部和外界访问和调用

private

  • 成员变量和成员函数只能在类的内部被访问和调用

下面看一段类成员的访问属性的代码:

#include <stdio.h>
 
struct Biology 
{
    bool living;
};
 
struct Animal : Biology 
{
    bool movable;
    
    void findFood()
    { 
    }
};
 
 
struct Human : Animal 
{
    void sleep() 
    { 
        printf("I'm sleeping...\n");
    }
    
    void work() 
    { 
        printf("I'm working...\n");
    }
};
 
struct Girl : Human
{
private:
    int age;
    int weight;
public:
    void print()
    {
        age = 22;
        weight = 48;
        
        printf("I'm a girl, I'm %d years old.\n", age);
        printf("My weight is %d kg.\n", weight);
    }
};
 
struct Boy : Human
{
private:
    int height;
    int salary;
public:
    int age;
    int weight;
 
    void print()
    {
        height = 175;
        salary = 9000;
        
        printf("I'm a boy, my height is %d cm.\n", height);
        printf("My salary is %d RMB.\n", salary);
    }    
};
 
int main()
{
    Girl g;
    Boy b;
    
    g.print();
    
    b.age = 19;
    b.weight = 120;
    //b.height = 180;
    
    b.print();
    
    return 0;
}

下面为输出结果:

注意:如果我们访问 boy 里面的 height,因为是 private,所以编译时就会报如下错误:

三、类成员的作用域

类成员的作用域

  • 类成员的作用域都只在类的内部,外部无法直接访问
  • 成员函数可以直接访问成员变量和调用成员函数
  • 类的外部可以通过类变量访问 public 成员
  • 类成员的作用域与访问级别没有关系

注:C++ 中用 struct 定义的类中所有成员默认为 public

下面看一段类成员的作用域的代码:

#include <stdio.h>
 
int i = 1;
 
struct Test
{
private:
    int i;
 
public:
    int j;
        
    int getI()
    {
        i = 3;
        
        return i;
    }
};
 
int main()
{
    int i = 2;
    
    Test test;
    
    test.j = 4;
    
    printf("i = %d\n", i);              // i = 2;
    printf("::i = %d\n", ::i);          // ::i = 1;
    // printf("test.i = %d\n", test.i);    // Error
    printf("test.j = %d\n", test.j);    // test.j = 4
    printf("test.getI() = %d\n", test.getI());  // test.getI() = 3
    
    return 0;
}

下面为输出结果:

::i 意味着访问默认命名空间中的 i 变量,默认的命名空间就是全局作用域。

四、小结

  • 类通常可以分为使用方式和内部细节两部分
  • 类的封装机制使得使用方式和内部细节相分离
  • C++ 中通过定义类成员的访问级别实现封装机制
  • public 成员可以在类的内部和外界访问和调用
  • private 成员只能在类的内部被访问和调用

到此这篇关于C++ 深入讲解类与封装的概念与使用的文章就介绍到这了,更多相关C++ 类与封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现一个多线程委托模型的示例详解

    C语言实现一个多线程委托模型的示例详解

    这篇文章主要介绍了C语言实现一个多线程委托模型,这就是一个使用C语言实现多线程委托模型的例子,其中包含boss线程和worker线程,可以处理工作线程的异常情况,需要的朋友可以参考下
    2023-06-06
  • C语言位图算法详解

    C语言位图算法详解

    这篇文章主要介绍了C语言实现的位图算法,主要包括了位图算法的定义与应用,对于C程序算法设计的学习有一定的借鉴价值,需要的朋友可以参考下
    2014-09-09
  • 利用Matlab实现时域分析功能的示例详解

    利用Matlab实现时域分析功能的示例详解

    利用MATLAB可以方便地进行控制系统的时域分析。这篇文章主要通过简单的示例为大家介绍了Matlab进行时域分析的具体操作,需要的可以参考一下
    2023-02-02
  • C语言中的链接编写教程

    C语言中的链接编写教程

    这篇文章主要介绍了C语言中的链接编写教程,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C++ string格式化输出方式

    C++ string格式化输出方式

    今天小编就为大家分享一篇C++ string格式化输出方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 深入理解卡特兰数及其应用

    深入理解卡特兰数及其应用

    本篇文章是对卡特兰数及其应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 在C语言里单引号和双引号的区别

    在C语言里单引号和双引号的区别

    这篇文章主要介绍了在C语言里单引号和双引号的区别,本文通过代码的实例和注释的详细的说明了单引号和双引号的概念与区别,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言数据结构中树与森林专项详解

    C语言数据结构中树与森林专项详解

    这篇文章主要介绍了C语言数据结构中树与森林,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • C++实现学生档案管理系统

    C++实现学生档案管理系统

    这篇文章主要为大家详细介绍了C++实现学生档案管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C++中指针的详解及其作用介绍

    C++中指针的详解及其作用介绍

    这篇文章主要介绍了C++中指针的详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论