我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++数据封装以及定义结构介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++数据封装以及定义结构介绍

今天小编给大家分享的是C++数据封装以及定义结构介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。

先介绍一个字符串比较函数:strcmp(s1,s2),当s1<s2时,返回一个负整数;当s1=s2时,返回值为0;当s1>s2时,返回一个正整数
还有一个字符串复制函数:strcpy(a,b),表示将字符串b的值复制给字符串a当然字符串b的长度不能超过字符串a

定义结构

为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct type_name {member_type1 member_name1;member_type2 member_name2;member_type3 member_name3;..} object_names;

type_name 是结构体类型的名称,member_type1 member_name1 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明一个结构体类型 Books,变量为 book:

struct Books{   char  title[50];   char  author[50];   char  subject[100];   int   book_id;} book;

访问结构成员

为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。

下面的实例演示了结构的用法:

#include <iostream>#include <cstring> using namespace std; // 声明一个结构体类型 Books struct Books{   char  title[50];   char  author[50];   char  subject[100];   int   book_id;}; int main( ){   Books Book1;        // 定义结构体类型 Books 的变量 Book1   Books Book2;        // 定义结构体类型 Books 的变量 Book2    // Book1 详述   strcpy( Book1.title, "C++ 教程");   strcpy( Book1.author, "Runoob");    strcpy( Book1.subject, "编程语言");   Book1.book_id = 12345;    // Book2 详述   strcpy( Book2.title, "CSS 教程");   strcpy( Book2.author, "Runoob");   strcpy( Book2.subject, "前端技术");   Book2.book_id = 1234556;    // 输出 Book1 信息   cout << "第一本书标题 : " << Book1.title <<endl;   cout << "第一本书作者 : " << Book1.author <<endl;   cout << "第一本书类目 : " << Book1.subject <<endl;   cout << "第一本书 ID : " << Book1.book_id <<endl;    // 输出 Book2 信息   cout << "第二本书标题 : " << Book2.title <<endl;   cout << "第二本书作者 : " << Book2.author <<endl;   cout << "第二本书类目 : " << Book2.subject <<endl;   cout << "第二本书 ID : " << Book2.book_id <<endl;    return 0;}

实例中定义了结构体类型 Books 及其两个变量 Book1 和 Book2。当上面的代码被编译和执行时,它会产生下列结果: 

第一本书标题:C++教程
第一本书作者:Runoob
第一本书类目:编程语言
第一本书ID:12345
第一本书标题:CSS教程
第一本书作者:Runoob
第一本书类目:前端技术
第一本书ID:123456

结构作为函数参数

您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量:

#include <iostream>#include <cstring> using namespace std;void printBook( struct Books book ); // 声明一个结构体类型 Books struct Books{   char  title[50];   char  author[50];   char  subject[100];   int   book_id;}; int main( ){   Books Book1;        // 定义结构体类型 Books 的变量 Book1   Books Book2;        // 定义结构体类型 Books 的变量 Book2     // Book1 详述   strcpy( Book1.title, "C++ 教程");   strcpy( Book1.author, "Runoob");    strcpy( Book1.subject, "编程语言");   Book1.book_id = 12345;    // Book2 详述   strcpy( Book2.title, "CSS 教程");   strcpy( Book2.author, "Runoob");   strcpy( Book2.subject, "前端技术");   Book2.book_id = 1234556;    // 输出 Book1 信息   printBook( Book1 );    // 输出 Book2 信息   printBook( Book2 );    return 0;}void printBook( struct Books book ){   cout << "书标题 : " << book.title <<endl;   cout << "书作者 : " << book.author <<endl;   cout << "书类目 : " << book.subject <<endl;   cout << "书 ID : " << book.book_id <<endl;}

当上面的代码被编译和执行时,它会产生下列结果:

书标题:C++教程
书作者:Runoob
书类目:编程语言
书ID:12345
书标题:CSS教程
书作者:Runoob
书类目:前端技术
书ID:123456

指向结构的指针

您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:

struct Books *struct_pointer;

现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:

struct_pointer = &Book1;

为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:

struct_pointer->title;

让我们使用结构指针来重写上面的实例,这将有助于您理解结构指针的概念:

#include <iostream>#include <cstring> using namespace std;void printBook( struct Books *book ); struct Books{   char  title[50];   char  author[50];   char  subject[100];   int   book_id;}; int main( ){   Books Book1;        // 定义结构体类型 Books 的变量 Book1   Books Book2;        // 定义结构体类型 Books 的变量 Book2     // Book1 详述   strcpy( Book1.title, "C++ 教程");   strcpy( Book1.author, "Runoob");    strcpy( Book1.subject, "编程语言");   Book1.book_id = 12345;    // Book2 详述   strcpy( Book2.title, "CSS 教程");   strcpy( Book2.author, "Runoob");   strcpy( Book2.subject, "前端技术");   Book2.book_id = 1234556;    // 通过传 Book1 的地址来输出 Book1 信息   printBook( &Book1 );    // 通过传 Book2 的地址来输出 Book2 信息   printBook( &Book2 );    return 0;}// 该函数以结构指针作为参数void printBook( struct Books *book ){   cout << "书标题  : " << book->title <<endl;   cout << "书作者 : " << book->author <<endl;   cout << "书类目 : " << book->subject <<endl;   cout << "书 ID : " << book->book_id <<endl;}

当上面的代码被编译和执行时,它会产生下列结果:

书标题:C++教程
书作者:Runoob
书类目:编程语言
书ID:12345
书标题:CSS教程
书作者:Runoob
书类目:前端技术
书ID:123456

typedef 关键字

下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。例如:

typedef struct Books{   char  title[50];   char  author[50];   char  subject[100];   int   book_id;}Books;

现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:

Books Book1, Book2;

您可以使用 typedef 关键字来定义非结构类型,如下所示:

typedef long int *pint32; pint32 x, y, z;

x, y 和 z 都是指向长整型 long int 的指针。

C++ 数据封装

所有的 C++ 程序都有以下两个基本要素:

  • 程序语句(代码):这是程序中执行动作的部分,它们被称为函数。

  • 程序数据:数据是程序的信息,会受到程序函数的影响。

封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。

数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

C++ 通过创建类来支持封装和数据隐藏(public、protected、private)。我们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。默认情况下,在类中定义的所有项目都是私有的。例如:

class Box{   public:      double getVolume(void)      {         return length * breadth * height;      }   private:      double length;      // 长度      double breadth;     // 宽度      double height;      // 高度};

变量 length、breadth 和 height 都是私有的(private)。这意味着它们只能被 Box 类中的其他成员访问,而不能被程序中其他部分访问。这是实现封装的一种方式。

为了使类中的成员变成公有的(即,程序中的其他部分也能访问),必须在这些成员前使用 public 关键字进行声明。所有定义在 public 标识符后边的变量或函数可以被程序中所有其他的函数访问。

把一个类定义为另一个类的友元类,会暴露实现细节,从而降低了封装性。理想的做法是尽可能地对外隐藏每个类的实现细节。

数据封装的实例

C++ 程序中,任何带有公有和私有成员的类都可以作为数据封装和数据抽象的实例。请看下面的实例:

#include <iostream>using namespace std; class Adder{   public:      // 构造函数      Adder(int i = 0)      {        total = i;      }      // 对外的接口      void addNum(int number)      {          total += number;      }      // 对外的接口      int getTotal()      {          return total;      };   private:      // 对外隐藏的数据      int total;};int main( ){   Adder a;      a.addNum(10);   a.addNum(20);   a.addNum(30);    cout << "Total " << a.getTotal() <<endl;   return 0;}

当上面的代码被编译和执行时,它会产生下列结果:

Total 60

上面的类把数字相加,并返回总和。公有成员 addNum 和 getTotal 是对外的接口,用户需要知道它们以便使用类。私有成员 total 是对外隐藏的,用户不需要了解它,但它又是类能正常工作所必需的。

设计策略

通常情况下,我们都会设置类成员状态为私有(private),除非我们真的需要将其暴露,这样才能保证良好的封装性。

这通常应用于数据成员,但它同样适用于所有成员,包括虚函数。

C++ 类 & 对象

C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。

类用于指定对象的形式,是一种用户自定义的数据类型,它是一种封装了数据和函数的组合。类中的数据称为成员变量,函数称为成员函数。类可以被看作是一种模板,可以用来创建具有相同属性和行为的多个对象。

C++ 类定义

定义一个类需要使用关键字 class,然后指定类的名称,并类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。

定义一个类,本质上是定义一个数据类型的蓝图,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。

C++数据封装以及定义结构介绍

以下实例我们使用关键字 class 定义 Box 数据类型,包含了三个成员变量 length、breadth 和 height:

class Box{   public:      double length;   // 盒子的长度      double breadth;  // 盒子的宽度      double height;   // 盒子的高度};

关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected,这个我们稍后会进行讲解。

定义 C++ 对象

类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。下面的语句声明了类 Box 的两个对象:

Box Box1; // 声明 Box1,类型为 Box Box Box2; // 声明 Box2,类型为 Box

对象 Box1 和 Box2 都有它们各自的数据成员。

访问数据成员

类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问。

C++数据封装以及定义结构介绍

为了更好地理解这些概念,让我们尝试一下下面的实例:

#include <iostream> using namespace std; class Box{   public:      double length;   // 长度      double breadth;  // 宽度      double height;   // 高度      // 成员函数声明      double get(void);      void set( double len, double bre, double hei );};// 成员函数定义double Box::get(void){    return length * breadth * height;} void Box::set( double len, double bre, double hei){    length = len;    breadth = bre;    height = hei;}int main( ){   Box Box1;        // 声明 Box1,类型为 Box   Box Box2;        // 声明 Box2,类型为 Box   Box Box3;        // 声明 Box3,类型为 Box   double volume = 0.0;     // 用于存储体积    // box 1 详述   Box1.height = 5.0;    Box1.length = 6.0;    Box1.breadth = 7.0;    // box 2 详述   Box2.height = 10.0;   Box2.length = 12.0;   Box2.breadth = 13.0;    // box 1 的体积   volume = Box1.height * Box1.length * Box1.breadth;   cout << "Box1 的体积:" << volume <<endl;    // box 2 的体积   volume = Box2.height * Box2.length * Box2.breadth;   cout << "Box2 的体积:" << volume <<endl;     // box 3 详述   Box3.set(16.0, 8.0, 12.0);    volume = Box3.get();    cout << "Box3 的体积:" << volume <<endl;   return 0;}

当上面的代码被编译和执行时,它会产生下列结果:

Box1的体积:210
Box2的体积:1560
Box3的体积:1536

需要注意的是,私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问。我们将在后续的教程中学习如何访问私有成员和受保护的成员。

关于C++数据封装以及定义结构介绍就分享到这里了,希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++数据封装以及定义结构介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++数据封装以及定义结构介绍

今天小编给大家分享的是C++数据封装以及定义结构介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。先介绍一个字符串比较函数:strcmp(s1,s2),当s1
2023-08-03

C++数据封装以及定义结构的详细讲解

这篇文章主要详细讲解了C++数据封装以及定义结构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-20

C语言中不定参数 ... 的语法以及函数封装

不定参数是指函数可以接收不确定个数的参数,下面这篇文章主要给大家介绍了关于C语言中不定参数 ... 的语法以及函数封装的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-01-28

Redis数据库的安装部署以及基本操作介绍

本篇内容介绍了“Redis数据库的安装部署以及基本操作介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Redis数据库概述Redis是一个
2023-06-20

C语言数据结构之队列怎么定义与实现

今天小编给大家分享一下C语言数据结构之队列怎么定义与实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、队列的性质上次我们
2023-07-02

数据库介绍以及mysql的安装配置,超详细教程

数据库–基础 数据库相关概念 数据库 存储数据的仓库,数据是有组织的进行存储英文:DataBase,简称DB 数据库管理系统 管理数据库的大型软件英文:DataBase Management,简称DBMS SQL 英文:Structured
数据库介绍以及mysql的安装配置,超详细教程
2023-12-25

C++ 元编程在自定义容器和数据结构中的应用?

元编程可用于创建自定义容器和数据结构。自定义容器:可定制行为和特性,如线程安全和动态大小,例:定制化的链表。数据结构:可定制结构,如高度和节点类型,例:高度为 2 或 3 的二叉树。C++ 元编程在自定义容器和数据结构中的应用元编程是一种
C++ 元编程在自定义容器和数据结构中的应用?
2024-05-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录