类的封装和继承c++练习题

敲代码的xiaolang
潜力新星
2021-12-01 14:19:32
加精

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;
}



...全文
237 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,162

社区成员

发帖
与我相关
我的任务
社区描述
学习「 算法 」的捷径就是 「 题海战略 」,社区由「 夜深人静写算法 」作者创建,三年ACM经验,校集训队队长,亚洲区域赛金牌,世界总决赛选手。社区提供系统的训练,答疑解惑,面试经验,大厂内推等机会
社区管理员
  • 英雄哪里出来
  • 芝麻粒儿
  • Amy卜bo皮
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

QQ群:480072171

英雄算法交流 8 群

 

试试用AI创作助手写篇文章吧