C++ 类的设计

news/2024/7/24 12:16:21 标签: c++, 开发语言

一、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.niftyadmin.cn/n/5144217.html

相关文章

RDKit(2023.09.1 )环系统模板

环境 Python 3.9RDKit 2023.09.1from rdkit import Chem from rdkit.Chem import rdDepictor from rdkit.Chem import Draw from rdkit.Chem.Draw import IPythonConsoleIPythonConsole.ipython_useSVG=True %matplotlib inline import rdkit print(rdkit.__version__) 2023.09…

并查集易错点

并查集就俩核心点,1是找父节点,2是合并 1: return fa[x] x ? x : fa[x] find(fa[x]); 2. fa[find(a)] find(b) 第二步还挺容易写错的,左边是find(a)的根,而不是fa[a]

OpenSearch使用scroll滚动搜索实战

文章目录 前言当前环境实战遇到的问题 前言 起源和开源性质: Elasticsearch:Elasticsearch最初由Elastic公司开发,后来开源,但采用了Elastic License,这是一种有限制的许可协议。 OpenSearch:OpenSearch是从Elasticsea…

2021~2023年度长垣起重机博览会最佳产品彩页(修订中)

1.河南恒达 比较完善的起重量限制器产品线分类,提供了监控参数一览表。 2.沪源电机 详细的电机参数,这基本上可以作为电机发展的历史资料来搜集。 3.英威腾 详细的变频器功能 4.杭州浙起 详尽的电动葫芦结构展示,电动葫芦参数展示 5.…

Linux学习第30天:Linux 自带的 LED 灯驱动实验:驱动开发思维方式的转变势在必行

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 学习嵌入式Linux驱动开发整整30天了。今天简单做一个小结。因为之前的主要工作是做ARM的裸机开发,所以接触Linux以后感觉很多东西都变了。不仅仅包括…

【数据结构二叉树】先序层序建立、递归非递归遍历层序遍历、树高、镜面、对称、子树、合并、目标路径、带权路径和等等

二叉树 文章目录 二叉树1. 二叉树的建立(递归创建,结构体指针形式)1.1. 先序建立1.2. 层序建立 2. 递归遍历(结构体指针)2.1. 先序遍历2.2. 中序遍历2.3. 后序遍历 3. 非递归遍历(结构体指针)3.1. 层次遍历3.2. 后序遍历(非递归) 4. 求树的高…

C语言队列实现

1.知识百科 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的…

PyRosetta加载pose对象

在PyRosetta中,pose 是一个非常重要的对象,代表了蛋白质的构象和结构信息,它为蛋白质结构建模和分析提供了丰富的功能和工具。 ### 1. 加载包 from pyrosetta import * init() #dir(pyrosetta) # 查看pyrosetta包中的函数### 2. 加载pose对象…