当前位置: 首页 > news >正文

C++ Primer 类和对象(3)

        类和结构体是比较相似,而传统的C的结构体中都是一些数据的类型,类除了有数据之外还有函数。所以可以把类想象成一个具有既有数据又有函数的复合数据类型。

        类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。

        以股票为例:

股票中的数据类型有:股票的价格,股票的公司,所持股票的量等等。

可执行的操作限制为:获得股票,增持,卖出股票,更新股票价格,显示所持股票的信息。

        存储下面的信息:

  • 公司名称;
  • 所持股票的数量;
  • 每股的价格;
  • 股票总价;

        然后定义类。一般来说,类规范由两个部分组成。

  • 类声明:以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。
  • 类方法定义:描述如何实现类成员函数。

        简单来说,类声明提供了类的蓝图,而方法定义则提供了细节。

一般来说把类的定义放在.h文件中,类的成员函数的实现放入.c文件中

        凡是出现在private中出现的标识无论是函数还是数据的某个变量某个类型,都只能通过public中的方法间接地去访问它。

       

stock00.cpp

#include <iostream>
#include "stock00.h"void Stock::acquire(const std::string &co,long n,double pr)
{company = co;if(n<0){std::cout<<"Numer of shares can't be negative;"<<company<<"shares set to be 0."<<std::endl;}else {shares = n;}share_val = pr;set_tot();
}
void Stock::buy(long num,double price)
{if(num<0){std::cout<<"Numer of shares can't be negative,Transaction is aborted"<<std::endl;}else{shares += num;share_val = price;set_tot();}
}
void Stock::sell(long num,double price)
{if(num<0){std::cout<<"Numer of shares can't be negative,Transaction is aborted"<<std::endl;}else if(num >shares){std::cout<<"You can't sell more than you have!Trancsaction is aborted"<<std::endl;}else{shares -= num;share_val=price;set_tot();}
}
void Stock::update(double price)
{share_val = price;set_tot();
}
void Stock::show()
{std::cout<<"Company:"<<company<<std::endl;std::cout<<"Shares:"<<shares<<std::endl;std::cout<<"Share price"<<share_val<<std::endl;std::cout<<"Total worth:"<<total_val<<std::endl;
}

        Stock是类,而fluffy_the_cat就是类的对象。其中 fluffy_the_cat 就像是 int i 中的 i 。类的成员函数可以通过对象来调用。类似于用结构体的对象来访问结构体中的成员。

        要使用新类型,最关键的是要了解成员函数的功能,而不必考虑其实现细节。就像std空间,我们只需要知道如何使用cin,cout之类的功能,而不用去了解为什么。一般把这种方法称为“客服/服务器模型”。

        客服/服务器模型

        OOP程序员(面向对象的程序员)经常依照 客服/服务器模型 来讨论程序设计。客服是使用类的程序。类声明(包括类方法)构成了服务器,它是程序可以使用的资源。客户只能通过以公有方式(public)定义的接口使用服务器。所以客户只需要了解该接口。设计服务器的人的责任是确保服务器根据该接口可靠并准确的执行。服务器设计人员只能修改类的设计的实现细节,而不能修改接口。

        指定类设计的第一步是提供类声明。类声明类似于结构声明,可以包括数据成员和函数成员。声明有私有部分,在其中声明的成员只能通过成员函数进行访问;声明还有公有部分,在其中声明的成员可以被使用类的对象的程序直接访问。通常,数据成员被放在私有部分中,成员函数被放在公有部分中,因此典型的类声明格式如下:

class className
{private:data member declarations    //数据成员声明public:member function prototypes  //成员函数原型
};

        除非函数很短可以直接在函数定义的时候写出来,变成内联函数,否则尽量单独提供函数类的声明以及类的成员函数定义。例如set_tot():

private:std::string company;long shares;double share_val;double total_val;void set_tot(){total_val = shares * share_val;}

 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 acquire(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

 usestock00.cpp

#include <iostream>
#include "stock00.h"int main()
{Stock fluffy_the_cat;fluffy_the_cat.acquire("PTU",20,12.50);fluffy_the_cat.show();fluffy_the_cat.buy(15,18.125);fluffy_the_cat.show();fluffy_the_cat.sell(400,20.00);fluffy_the_cat.show();fluffy_the_cat.buy(300000,123.123);fluffy_the_cat.show();fluffy_the_cat.sell(300000,0.123);fluffy_the_cat.show();return 0;
}

要注意的是,只能在某些特定的环境中,如类方法的代码中,可以省略的类名和::作用域解析符。

假设Bozo有一个名为Retort()的成员函数,该函数返回char指针,则其函数头如下:

char * Bozo::Retort()

此时,Retort()不仅是一个char*类型的函数,而是一个属于Bozo类的char*函数。该函数全名(限定名)为Bozo::Retort()。而Retort()是限定名的缩写。

另一种描述这种情况的方式是,名称Retort的作用域为整个类,因此在类声明和类方法之外使用该名称时,需要使用作用域解析运算符进行限定。

        要创建对象,只需要将类名视为类型名既可:

Bozo bozetta;

        因为类是用于定义的类型,所以这样是可行的。

        类成员函数(方法)可以通过类对象来调用。

cout<<bozetta.retort();

        将调用Retort()成员函数,每当其中的代码引用某个数据成员时,该函数都将使用bozetta对象中相应成员的值。

相关文章:

C++ Primer 类和对象(3)

类和结构体是比较相似&#xff0c;而传统的C的结构体中都是一些数据的类型&#xff0c;类除了有数据之外还有函数。所以可以把类想象成一个具有既有数据又有函数的复合数据类型。 类是一种将抽象转换为用户定义类型的C工具&#xff0c;它将数据表示和操纵数据的方法组合成一个整…...

IntelliJ IDEA 介绍、安装、配置优化与快捷键大全

一、简介 IDEA全称 IntelliJ IDEA&#xff0c;是Java编程语言的集成开发环境。IntelliJ在业界被公认为最好的Java开发工具&#xff0c;尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能…...

css 语法笔记

.abc {margin-left:20px; } .xyz {margin-left:20px; } 等同于 .abc, .xyz {margin-left: 20px; } 参考 CSS - 选择器_css最后一个元素选择器_伏城之外的博客-CSDN博客 CSS Selectors Reference...

【初阶数据结构】二叉树全面知识总结

二叉树详解 树的概念及其结构树的概念树的相关概念树的表示方法孩纸兄弟表示法双亲表示法&#xff08;并查集&#xff09; 树的实际应用 二叉树二叉树的概念二叉树的种类二叉树的性质二叉树的存储结构 二叉树顺序结构的实现堆的概念及结构堆向上、向下调整法堆的插入堆的删除堆…...

CMD命令终端快捷键学习

很多环境需要安装并且指定环境变量才可用终端访问 比如一些数据库、一些环境、例如&#xff1a;nodejs Oracle、mysql 在一个文件夹按住shift鼠标右键可以快速在当前目录运行终端&#xff01;免去cd 目录的烦恼 快捷键 当你学习和使用命令终端&#xff08;如 Windows 的 CMD&…...

Leetcode198. 打家劫舍

https://leetcode.cn/problems/house-robber/description/ 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&…...

前端技术社区总目录

前端技术社区欢迎您的订阅。订阅后&#xff0c;您将可以查看以下所有博客内容。 注&#xff1a;专栏内容主要面向新手 注&#xff1a;每个示例都有相对应的完整代码 注&#xff1a;该专栏博客内容将会逐步迁移至https://blog.csdn.net/m0_60387551/article/details/128017725 …...

极客时间:左耳听风【文章笔记 思考总结】

本篇博客是学习过程中的笔记、思考和总结。原文链接&#xff1a;https://time.geekbang.org/column/intro/100002201 开篇词 | 洞悉技术的本质&#xff0c;享受科技的乐趣01 | 程序员如何用技术变现&#xff08;上&#xff09;02 | 程序员如何用技术变现&#xff08;下&#xf…...

《论文阅读27》SuperGlue: Learning Feature Matching with Graph Neural Networks

一、论文 研究领域&#xff1a; 图像特征点匹配论文&#xff1a;SuperGlue: Learning Feature Matching with Graph Neural NetworksCVPR 2020veido论文code 二、论文简述 [参考] [参考] [参考] 三、论文详述 SuperGlue&#xff1a;使用图神经网络学习特征匹配 本文介绍了…...

远程计算机或设备不接受连接解决方法

远程计算机或设备不接受连接解决方法 点击左下角开始&#xff0c;点击运行&#xff0c;输入inetcpl.cpl&#xff0c;点击确定&#xff0c;打开Internet选项。 将三个框的勾勾去掉&#xff0c;即为不选中状态&#xff0c;点击确定。 当你的电脑浏览器不能正常上网时&#xff…...

基于Python实现的快递管理系统源码+数据库,采用PyQt6实现GUI界面

快递管理系统 完整代码下载地址&#xff1a;快递管理系统 介绍 通过对传统的快递收发流程进行分析&#xff0c;完成网上快递管理系统的分析设计与开发&#xff0c;使客户能方便在网站上查询自己的快件信息以及网上寄件&#xff0c;同时管理员又能对每天的收到快件进行登记和…...

如何使用docker快速部署MinDoc文档系统

MinDoc是非常优秀的知识分享系统&#xff0c;但是很多刚接触的人会一脸懵逼&#xff0c;而且官方文档写的也并不清晰&#xff0c;所以和大家分享一下快速部署MinDoc的方法。 首先docker环境先自行安装好&#xff0c;这里不再赘述。 拉取docker镜像&#xff1a; docker pull …...

9月25日,每日信息差

今天是2023年9月27日&#xff0c;以下是为您准备的18条信息差 第一、苹果向法国监管机构提交iPhone 12软件更新&#xff0c;解决辐射超标问题 第二、“双节”期间&#xff0c;北京全市预计接待游客1283万人次&#xff0c;中秋国庆“双节”长假将至&#xff0c;北京市民和游客…...

【网络协议】Https

HTTP 协议内容都是按照⽂本的⽅式明⽂传输的,这就可能导致在传输过程中出现⼀些被篡改的情况。所以在HTTP协议的基础上&#xff0c;引入加密层&#xff0c;形成了HTTPS协议。 HTTPS 协议是由 HTTP 加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议&#xff0c;主要…...

Lostash同步Mysql数据到Elasticsearch(三)Elasticsearch模板与索引设置

logstash数据同步ES相关 同步数据时&#xff0c;Elasticsearch配合脚本的相关处理设置 1.模板创建更新 在kibana中执行&#xff0c;或者直接给ES发送请求&#xff0c;你懂得&#xff0c;不懂得百度下ES创建template PUT /_template/test-xxx {"template": "…...

python——ptp()函数

函数功能&#xff1a;求最大值和最小值的差值 def ptp(a, axisNone, outNone):"""沿轴的值范围&#xff08;最大值-最小值&#xff09;。该函数的名称来自“peak-to-peak”的首字母缩写。参数----------a:array_like输入值。axis:int&#xff0c;可选找到山峰的…...

SpringBoot之异常处理

文章目录 前言一、默认规则二、定制异常处理处理自定义错误页面ControllerAdviceExceptionHandler处理全局异常ResponseStatus自定义异常自定义实现 HandlerExceptionResolver 处理异常 三、异常处理自动配置原理四、异常处理流程总结 前言 包含SpringBoot默认处理规则、如何定…...

Flask-[实现websocket]-(2): flask-socketio文档学习

一、简单项目的构建 flask_websocket |---static |---js |---jquery-3.7.0.min.js |---socket.io_4.3.1.js |---templates |---home |---group_chat.html |---index.html |---app.py 1.1、python环境 python3.9.0 1.2、依赖包 Flask2.1.0 eventlet0.33.3 #使用这个性能会…...

网页中使用的图片格式

网页中使用的图片格式有以下几种&#xff0c;各有优缺点&#xff1a; JPEG&#xff1a;适用于照片或彩色图像&#xff0c;支持16.7万种颜色&#xff0c;有损压缩&#xff0c;可以调节压缩比和质量&#xff0c;文件较小&#xff0c;加载较快PNG&#xff1a;适用于图标或透明图像…...

【android】如何设置LD_LIBRARY_PATH?

目录 一 配置方法 1 进入Android shell 2 使用export命令 3 使用echo命令查看变量是否设置成功 二 扩展 1 LD_LIBRARY_PATH设置多个路径 2 push文件 一 配置方法 android中配置LD_LIBRARY_PATH的方法具体为&#xff1a; 1 进入Android shell adb shell 2 使用export…...

【hadoop3.x】一 搭建集群调优

一、基础环境安装 https://blog.csdn.net/fen_dou_shao_nian/article/details/120945221 二、hadoop运行环境搭建 2.1 模板虚拟机环境准备 0&#xff09;安装模板虚拟机&#xff0c;IP 地址 192.168.10.100、主机名称 hadoop100、内存 4G、硬盘 50G 1&#xff09;hadoop100…...

linux使用操作[2]

文章目录 版权声明网络传输ping命令wget命令curl命令端口linux端口端口命令和工具 进程管理查看进程关闭进程 主机状态top命令内容详解磁盘信息监控 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程序员或相…...

华南理工大学电子与信息学院23年预推免复试面试经验贴

运气较好&#xff0c;复试分数90.24&#xff0c;电科学硕分数线84、信通83、专硕电子与信息74. 面试流程&#xff1a; 1&#xff1a;5min ppt的介绍。其中前2min用英语简要介绍基本信息&#xff0c;后3min可用英语也可用中文 介绍具体项目信息如大创、科研、竞赛等&#xff08…...

Linux网络编程- ether_header iphdr tcphdr

struct ether_header struct ether_header 是一个数据结构&#xff0c;用于表示以太网&#xff08;Ethernet&#xff09;帧的头部。这个结构体在 <netinet/if_ether.h> 头文件中定义。当你处理或分析以太网帧时&#xff0c;可以使用这个结构体来访问和解读 Ethernet 头部…...

wpf中的StaticResource和DynamicResource

不同点一&#xff1a;StaticResource是程序载入时对资源的一次性使用&#xff0c;之后就不在访问了 DynamicResouce则是程序运行过程中回去访问资源 样例&#xff1a;在xaml中定义好的资源 <Window.Resources><SolidColorBrush x:Key"borderRed" Color"…...

数据结构与算法基础-(3)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…...

maven中relativepath标签的含义

一 relative标签的含义 1.1 作用 这个<parent>下面的<relativePath>属性&#xff1a;parent的pom文件的路径。 relativePath 的作用是为了找到父级工程的pom.xml;因为子工程需要继承父工程的pom.xml文件中的内容。然后relativePath 标签内的值使用相对路径定位…...

Greenplum 对比 Hadoop

Greenplum属于MPP架构&#xff0c;和Hadoop一样都是为了解决大规模数据的并行计算而出现的技术&#xff0c;两者的相似点在于&#xff1a; 分布式存储&#xff0c;数据分布在多个节点服务器上分布式并行计算框架支持横向扩展来提高整体的计算能力和存储容量都支持X86开放集群架…...

OJ练习第182题——字典树(前缀树)

字典树&#xff08;前缀树&#xff09; 208. 实现 Trie (前缀树)题目描述示例知识补充官解代码 211. 添加与搜索单词 - 数据结构设计题目描述示例思路Java代码 208. 实现 Trie (前缀树) 力扣链接&#xff1a;208. 实现 Trie (前缀树) 题目描述 示例 知识补充 插入字符串 我…...

前端知识总结

在前端开发中&#xff0c;y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1&#xff0c;并将自增后的值赋给变量y。 具体来说&#xff0c;x是一种后缀自增运算符&#xff0c;表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…...

政府网站建设项目采购需求/百度权重4网站值多少钱

1、吃了辣的东西&#xff0c;感觉就要被辣死了&#xff0c;就往嘴里放上少许盐&#xff0c;含一下&#xff0c;吐掉&#xff0c;漱下口&#xff0c;就不辣了。2、牙齿黄&#xff0c;可以把花生嚼碎后含在嘴里&#xff0c;并刷牙三分钟&#xff0c;很有效。3、若有小面积皮肤损伤…...

网站视频模块配置参数/下载百度搜索

前 言“C语言程序设计”是计算机专业和理工科各类专业重要的公共基础课程之一。C语言功能强大&#xff0c;使用灵活方便&#xff0c;移植性强&#xff0c;兼有高级编程语言和低级编程语言特点&#xff0c;利用C语言可以编写系统软件和各类应用软件。“C语言程序设计”是一门实践…...

免费做网站有哪些/成都网站建设方案托管

题目描述&#xff1a; 给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。示…...

沈阳做网站公司有哪些/黑马程序员培训机构在哪

知识和技能 知道电功率表示消耗电能快慢&#xff0c;知道电功率的单位是瓦。 会用功率的计算公式PW/t进行简单的计算。 会用功率的计算公式PUI进行简单的计算。 这世上最累的事情&#xff0c;莫过于眼睁睁看着自己的心碎了&#xff0c;还得自己动手把它粘起来。过程和方法…...

网站宣传单模板/无代码免费web开发平台

今天好像有同学因为用了宝塔 所以mqtt不能连接了...

wordpress网站导入数据库/seo怎么才能做好

有没有像xml一样的方法来为json字符串数据添加html标签。将html标签添加到json字符串例子&#xff1a;{"title": "bla bla", "copy": "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium…...