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的主要内容,如果未能解决你的问题,请参考以下文章