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++ 类与封装内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++封装IATHOOK类实例

    本文实例讲述了C++封装IATHOOK类的实现方法.分享给大家供大家参考.具体方法如下: 1. 定义成类的静态成员,从而实现自动调用 复制代码 代码如下: static CAPIHOOK sm_LoadLibraryA;  static CAPIHOOK sm_LoadLibraryW;  static CAPIHOOK sm_LoadLibraryExA;  static CAPIHOOK sm_LoadLibraryExW;  static CAPIHOOK sm_GetProcAddres

  • C++自定义封装socket操作业务类完整实例

    本文实例讲述了C++自定义封装socket操作业务类.分享给大家供大家参考,具体如下: Linux下C++封装socket操作的工具类(自己实现) socketconnector.h #ifndef SOCKETCONNECTOR_H #define SOCKETCONNECTOR_H #include "global.h" using namespace std; class SocketConnector { public: typedef enum { ENormal, EOth

  • C++封装线程类的实现方法

    本文实例讲述了C++封装线程类的实现方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: // 给主窗口的通知消息  #define WM_CUTTERSTART WM_USER + 100    // wParam == xxx  lParam==xxxx    /*  外面调用这个类时,只需要IsRunning() Startxxx(xxx) Suspendxxx()   Resumexxx() Stopxxx()  */    /*  m_bContinue在真正的工作代码Do

  • C++类和对象之封装详解

    目录 封装的意义以及示例 访问权限 公共权限 public 保护权限 protected 私有权限 private struct 和 class的区别 成员属性私有化 案例1:设计立方体类 案例2:点和圆的关系 总结 封装的意义以及示例 封装是C++面向对象三大特征之一 封装的意义: 将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制 语法:class 类名{  访问权限 : 属性  /  行为 }: 类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问. 示例1: 设计

  • 深入解析C++编程中类的封装特性

    共用接口和私有实现的分离 C++通过类来实现封装性,把数据和与这些数据有关的操作封装在一个类中,或者说,类的作用是把数据和算法封装在用户声明的抽象数据类型中. 实际上用户往往并不关心类的内部是如何实现的,而只需知道调用哪个函数会得到什么结果,能实现什么功能即可. 在声明了一个类以后,用户主要是通过调用公用的成员函数来实现类提供的功能(例如对数据成员设置值,显示数据成员的值,对数据进行加工等).因此,公用成员函数是用户使用类的公用接口(public interface),或者说是类的对外接口. 类

  • C++进程共享数据封装成类实例

    本文实例讲述了C++进程共享数据封装成类的方法,分享给大家供大家参考.具体方法如下: ShareMemory.cpp源文件如下: 复制代码 代码如下: #include "ShareMemory.h"    CShareMemory::CShareMemory(const    char* pszMapName, int nFileSize, BOOL bServer):m_hFileMap(NULL),m_pBuffer(NULL)  {      if (bServer) //是服

  • C++字符串类的封装你真的了解吗

    目录 字符串类的封装 常规代码 头文件 函数实现文件 Test文件 重载左移>> 重载右移<< 重载赋值= 重载中括号[ ] 重载加号+ 重载== 总结 字符串类的封装 常规代码 头文件 #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; class MyString//字符串应该是维护着一个字符数组的,在堆区 { public: MyString(

  • C++封装远程注入类CreateRemoteThreadEx实例

    本文实例讲述了C++封装远程注入类CreateRemoteThreadEx的方法,分享给大家供大家参考.具体方法如下: 首先,类初始化时传入要注入的DLL文件名 只使用两个函数 复制代码 代码如下: // 注入DLL到指定的地址空间 BOOL InjectModuleInto(DWORD dwProcessId); // 从指定的地址空间卸载DLL BOOL EjectModuleFrom(DWORD dwProcessId); .h头文件如下: 复制代码 代码如下: #pragma once 

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

    目录 一.类的组合 二.类的封装 三.类成员的作用域 四.小结 一.类的组合 电脑一般而言是由 CPU,内存,主板,键盘和硬盘等部件组合而成. 二.类的封装 类通常分为以下两个部分 类的实现细节 类的使用方式 当使用类时,不需要关心其实现细节 当创建类时,才需要考虑其内部实现细节 例: 普通用户使用手机 只需要学习如何发短信,打电话,拍照,等等 手机开发工程师 需要考虑手机内部的实现细节 封装的基本概念 根据经验:并不是类的每个属性都是对外公开的 如:女孩子不希望外人知道自己的体重和年龄 如:男

  • C++深入讲解类与对象之OOP面向对象编程与封装

    目录 1.面向对象编程 2.面向过程性编程和面向对象编程 3.类的引入 4.类的定义 4.1类的两种定义方式 4.1.1声明和定义全部放在类体中 4.2.2.声明和定义不放在类体中 5.类的访问限定符及封装 5.1 访问限定符 5.2封装 6.类的作用域 7.类的实例化 8.类对象模型 如何计算类对象的大小 面向过程编程也叫结构化编程.虽然结构化编程的理念提高了程序的清晰度,可靠性,并且方便维护.但它再编写大型的程序时,仍然面临这巨大的挑战,OOP(面向对象编程)提供了一种新的方法.与强调算法的

  • C++深入分析讲解类的知识点

    目录 知识点引入 类的初识 1.封装 2.权限 3.类的定义(定义类型) 4.类的成员函数与类中声明及类外定义 Person类的设计 设计立方体类 点Point和圆Circle的关系 知识点引入 C语言中 数据 和 方法 是独立: //c语言的思想:数据 方法 分开 //人 typedef struct { char name[32]; int age; }Person; //动物 typedef struct { char name[32]; int age; int type; }Dog;

  • Python面向对象程序设计类的封装与继承用法示例

    本文实例讲述了Python面向对象程序设计类的封装与继承用法.分享给大家供大家参考,具体如下: 访问限制(封装) 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义本身就是封装的体现. 狭义的封装:一个类的某些属性,不希望外界直接访问,而是把这个属性私有化[只有当前类持有],然后暴露给外界一个访问的方法. 封装的本质:就是属性私有化的过程. 封装的好处:提供了数据的复用性,保证了数据的安全性. 举例:插排 2.使用 class Person(object):

  • java封装的概念和实现方法示例

    本文实例讲述了java封装的概念和实现方法.分享给大家供大家参考,具体如下: 封装:是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 封装的好处: 只能通过规定方法访问数据 隐藏类的实现细节 方便加入控制语句 方便修改实现 经过封装的属性,不能直接访问,要通过公共属性get/set方法访问. 代码: package com.jredu.oop.ch01; /** * 某公司要开发内部的 "办公管理信息系统",请使用面向对象的思

  • Java全面细致讲解类与对象

    目录 类和对象的关系 类和对象的实例化 static关键字 private实现的封装 构造方法 this关键字 代码块 匿名对象 小结 类和对象的关系 类就是一类对象的统称.对象就是这一类具体化的一个实例. (对象是类的实例化) 对象是什么? 此对象非彼对象!!!说到对象就要提到过程. 面向过程:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题.面向过程注重的是过程,在整个过程中所涉及的行为,就是功能. 面向对象:JAVA是基于面向对象的,关注的是对象,将一件事情

  • C++简单又轻松的讲解类和对象中友元函数

    目录 友元 浅解概念 友元目的 友元的三种实现 全局函数做友元 类做友元 成员函数做友元 注意事项 总结 友元 用到关键字 friend 浅解概念 举一个非常实际的例子,假如端午节到了你煮了两种粽子,一种是普通的糯米粽子,一种是特殊的五花肉粽子,糯米粽只要是客人都可以品尝,而五花肉棕只限好朋友品尝,这时候就可以用到友元的知识了.在程序里,有些私有属性也想让类外特殊的一些函数或者类访问,就要用到友元函数. 友元目的 让一个函数或者类,访问另一个类的私有属性 友元的三种实现 全局函数.成员函数.类都

  • 实例解析iOS app开发中音频文件播放工具类的封装

    一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 复制代码 代码如下: - (id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; - (id)initWithData:(NSData *)data error:(NSError **)outError; 准备播放(缓冲,提高播放的流畅性) - (BOOL)prep

  • PHP类的封装与继承详解

    封装 把成员方法和成员属性封装到类中,隐藏属性和方法实现的细节,通过public.protected.private等限定类成员的访问权限,数据被保护在内部,只通过被授权的成员方法才可以操作,尽可能的对成员进行封装. public:方法或者属性在任何作用域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public. protected:本类和子类可以访问,外部对象不可以调用. private:只能在本类访问,子类与外部对象都不可能调用.经过private标记的方法或

  • 解析Java的JVM以及类与对象的概念

    Java虚拟机(JVM)以及跨平台原理 相信大家已经了解到Java具有跨平台的特性,可以"一次编译,到处运行",在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM). JVM也是一个软件,不同的平台有不同的版本.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件.Java虚拟机就是负责将字节码文件翻译成特定平

随机推荐