C++试题精选----类的封装和继承----NO.3

Posted 敲代码的xiaolang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++试题精选----类的封装和继承----NO.3相关的知识,希望对你有一定的参考价值。

希望c++的入门者们闲暇之余,可以浏览思考,有什么问题欢迎留言或者私信。

类的封装和继承----NO.3

eg. 编程题
假设某商店有如下几种货品:衬衣、帽子、立柜。每一种货物都有与其关联的说明信息。
衬衣:单价、产地、库存量、布料;
帽子:单价、产地、库存量、布料、样式(平顶或尖顶);
立柜:单价、产地、库存量、木料、颜色。
对这些商品的操作有:商品的进库(增加库存量),商品的出库(减少库存量),该类货品总价格的计算。要求自行设计数据结构,用类的继承与派生关系将上述的各种货品表示出来,并使用类的构造函数来初始化每一类对象的初始数据。而后将上述的商品管理计算机化,完成操作要求的功能。
【实现方法提示】
(1).设立3 个不同的类来描述与处理3 种不同的货品。首先注意到上述3 种货品数据之间的相互关联关系,可使用C++基类及其派生类的定义方法,先抽象出(“提取”出)如下每一货品都具有的 “公有”数据构成一个所谓的基类base,而后再派生出所需的那3 个类。
①Base(基)类:单价、产地、库存量;
②由Base 作为基类,派生出Shirt(衬衣)类:增加“布料”数据;
③由Base 出发,派生出Wardrobe(立柜)类:增加“木料”与“颜色”数据;
④而后又由Shirt 类出发(作为基类),派生出Cap(帽子)类:增加“样式”数据。
(2).对应于要对各类数据所进行的操作,而设立出类的如下几个成员函数。
①构造函数
通过传递来的实参数据,来构造出每一对象所具有的各数据成员。如基类Base 需要传递place、count 与price 三项数据,而派生类Shirt 则需在Base 数据的基础上增加第四项即布料数据material 等。
②商品的进库(增加库存量)
void in_something(int add_cnt);
将对象的库存量count 增加一个数量add_cnt。
③商品的出库(减少库存量)
void out_something(int del_cnt);
将对象的库存量count 减少一个数量del_cnt。
④该类货品总价格的计算
double total_price();
通过使用“price*count”计算并返回对象所代表货品的总价格。
⑤对象数据的输出。
在屏幕上显示出对象所拥有的当前数据。

#include<iostream>
#include<string>
using namespace std;
class Base
{
	public:
		Base(int Count,double Price,string Place)
		{
			count=Count;     //在基类里面对所需要的数据进行定义 
			price=Price;
			place=Place;
		}
		int in_something(int );
		int out_something(int);
		double total_price(double );
	    protected:
	    int count;
		double price;
		string place;     //使用string来存储一段字符 
};
class Shirt:public Base
{
	public:             //在shirt类里面调用base类中的元素,base类里面不需要写出来数据类型 
	Shirt(int count,double price,string place,string Material):Base( count, price, place)
	{
		material=Material;
	}
	void print1();
    protected:
	string material;	
};

class Wardrobe:public Base
{
	public:              //在wardrobe类里面调用base类中的数据 
    Wardrobe(int count,double price,string place,string Colour,string Muliao):Base(count,price,place)
	{
		colour=Colour;
		muliao=Muliao;
		 } 	
		void print2();
		protected:
			string colour;
			string muliao;
};
class Cap:public Shirt
{
	public:                //在cap类的里面,调用shirt类的数据,此时material无需再次在cap类里面进行声明 
	Cap(int count,double price,string place,string Material,string Yangshi):Shirt( count, price, place, Material)
	{
		yangshi=Yangshi;
	}
		void print3();
		protected:
			string yangshi;
};

int Base::out_something(int number)
{
	count=count-number;
}
int Base::in_something(int number)
{
	count=count+number;
}
double Base::total_price(double )
{
	return count*price;
}

void Shirt::print1()
{
	cout<<"库存量:"<<count<<" 产地:"<<place<<" 单价:"<<price<<" 布料:"<<material<<" 总价格:"<<count*price<<endl;
}
void Wardrobe::print2()
{
	cout<<"库存量:"<<count<<" 产地:"<<place<<" 单价:"<<price<<" 木料: "<<muliao<<" 颜色:"<<colour<<" 总价格:"<<count*price<<endl;
 
}
void Cap::print3()
{
	cout<<"库存量:"<<count<<" 产地:"<<place<<" 单价:"<<price<<" 布料:"<<material<<" 样式:"<<yangshi<<" 总价格:"<<count*price<<endl; 
}
int main()
{
	Shirt s(10,100,"beijing","mian hua");            //输入所需要的数据 
	Wardrobe w(5,100,"shanghai","black","yu mu");
	Cap c(10,100,"shenzhen","skill","ping ding");
	s.in_something(2);        
	w.out_something(1);
	s.print1();
	w.print2();
	c.print3();
	return 0;
}

运行结果
在这里插入图片描述
有问题私聊博主或者在下面留言,如果有更好的解法也请留言,欢迎大家讨论,共同进步,一起学习。

C++是面向对象编程,我也想面向对象编程。”

以上是关于C++试题精选----类的封装和继承----NO.3的主要内容,如果未能解决你的问题,请参考以下文章

C++试题精选----类的封装和继承----NO.3

C++试题精选----类的封装和继承----NO.1

C++试题精选----类的封装和继承----NO.5

面向对象概述测试题

python类的继承和多态

C++的三大特性封装继承和多态