文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++类的定义与实现方法是什么

2023-06-22 07:34

关注

这篇文章主要讲解了“C++类的定义与实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++类的定义与实现方法是什么”吧!

一、类的定义

根据C++ Primer中的描述,类的定义是一种将抽象转换为用户定义类型的C++工具。也就是说类的实质是一种用户自定义类型,它可以将数目表示和操作数据的方法组合成一个整洁的包。

在实际开发当中,想要实现一个类,并编写一个使用它的程序是相对比较复杂的,涉及多个步骤。

通常,我们会将类的定义放在头文件当中,并将实现的代码放在源代码文件中。我们来看C++ Primer当中的一个例子:一个关于股票买卖的类。

首先是类的定义,写在stock00.h文件中:

#ifndef STOCK00_H_#define STOCK00_H_#include <string>class Stock {    private:     std::string company;     long shares;     double share_val;     double total_val;     void set_tot() {total_val = shares * share_val;}    public:     void accquire(const std::string &co, long n, double pr);     void buy(long num, double price);     void sell(long num, double price);     void update(double price);     void show();};#endif

首先是关键字class,它表示我们声明的是一个类,一般类名我们使用大驼峰命名法定义。

其次在这个类的定义当中,我们看到了两个新出现的关键字privatepublic。这两个关键字描述了对类成员的访问控制,使用类对象的程序,都可以直接访问公有部分(public),但无法访问对象的私有成员。

想要获取私有成员,只能通过公有的成员函数。比如在上面这个例子当中,我们想要修改share_val只能通过公有的方法sellbuy,而无法直接对变量的值进行修改。防止程序直接访问数据修改数据被称为数据隐藏。

除了publicprivate,C++当中还提供了第三个关键字叫做protected,这个关键字和类的继承有关,我们将会在之后的文章当中进行讨论。

数据隐藏的思想其实是认为类中的成员变量的所有权应该属于类本身,当我们需要对类中的数据进行读取和修改的时候,应当通过类提供的公开方法,而不是直接操作类中值。这被认为是一种面向对象的思想,即只能通过类提供的方法访问数据,而不应该直接访问数据。

C++正是基于这种面向对象的思想设计的,所以类中的成员默认是private的,我们可以省去private关键字:

class World {    float mass;    char name[30];public:    void tellall();    ...};

我们从类的描述看上去很像是包含了成员函数以及数据隐藏的结构体,但实际上这是因为C++对结构体进行了拓展,让它具有了和类相同的特性。在C语言当中,结构体是没有这么多特性的。

比如我们可以给结构体设计构造函数,也可以给结构体添加成员函数,甚至结构体也可以继承、派生和多态。

它们之间唯一的区别是,结构体的默认类型是public,而类是private。所以通常使用类来实现对象,而结构体只用来结构化地存储数据。

另外多说一句,数据隐藏的面向对象理念并不适用于所有语言。比如Python,Python当中的类中的成员变量默认是public,且没有private关键字。

二、类的实现

当我们完成了类定义之后, 还需要来实现类当中的函数。

比如我们在stock00.h当中定义了一个类:

#ifndef STOCK00_H_#define STOCK00_H_#include <string>class Stock {    private:     std::string company;     long shares;     double share_val;     double total_val;     void set_tot() {total_val = shares * share_val;}    public:     void accquire(const std::string &co, long n, double pr);     void buy(long num, double price);     void sell(long num, double price);     void update(double price);     void show();};#endif

1.成员函数

在这个定义当中,我们只是声明了函数,并没有具体实现函数的逻辑。

我们通常会在同名的cpp文件当中实现,实现的时候,需要使用作用域解析运算符来表示函数所属的类:

void Stock::update(double price) {    ...}

这样就表明了update函数所属Stock这个类,这也就意味着我们可以创建属于其他类的同名函数:

void Buffoon::update() {    ...}

其次,我们在成员函数当中,可以访问private限定的成员变量。比如说在show函数当中,我们可以这样实现:

void Stock::show() {    std::cout << company << shares << share_val << total_val << endl;}

虽然company,shares都是类的私有成员,但在成员方法当中,一样可以正常访问。

再次,我们在成员方法当中调用另外一个成员方法,可以不需要解析运算符。比如我们要在show函数内调用update函数,直接使用update()即可,而无需前面的Stock::。

2.内联函数

我们再回过头来看一下Stock这个类的定义,在类的定义当中,有一个叫做set_tot的函数。我们直接在类当中实现了逻辑。虽然同样是成员函数,但是在类当中直接实现的函数是有所区别的。在类声明当中实现的函数,会被视为是内联函数。

一般我们会把一些比较简短的函数在类的声明当中直接实现,当然我们也可以使用关键字inline,手动指定某个函数是内联的。

class Stock {    private:    void set_tot();    public:    ...};inline void Stock::set_tot() {    total_val = shares * share_val;}

感谢各位的阅读,以上就是“C++类的定义与实现方法是什么”的内容了,经过本文的学习后,相信大家对C++类的定义与实现方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯