标题:有关stl问题的求助,应该比较简单,各位看看吧,就两个函数不会写
只看楼主
hhcxx2006
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-11-14
结帖率:50%
已结贴  问题点数:10 回复次数:7 
有关stl问题的求助,应该比较简单,各位看看吧,就两个函数不会写
    stl练习
模拟网上交易系统的中购物车;
要求实现下述两个类的成员函数,并且利用下面的main程序进行测试。
我前面的成员函数都已经写好了,就是Cart类里面的print()函数不知道怎么写,请问怎么在Cart类中调用Order类中的成员函数print(),且用stl?还有Cart类中的del函数,它要判断商品编号就得访问Order类中的私有成员,这个怎么实现?


本题目用Order模拟用户的订单,用Cart模拟用户的购物车;具体声明如下:
class Order//描述订单
{
public:
    Order(int gid, int gnum);//构造函数;
    void print();//显示订购的商品编号: 数量
    bool operator == (int gid);//判断当前商品编号是否与参数gid相同,相同返回true,否则返回false
private:
    int goods_id; //商品编号
    int goods_number;//商品数量
};

class Cart//描述购物车, 存储了多了产品的订单
{
public:
    void add(Order* or);//增加一个订单
    void print();//显示所有订单信息
    bool del(int gid); //如果有商品编号为gid的订单就删除,并返回true,否则返回false
private:
    list l_goods;//存储了多了产品的订单
};


void main()
{
    Cart c;
    int n,i;
    int gid,gnum;
    cout << "你要订购多少商品" <<endl;
    cin >> n;
    //测试 Cart::add方法
    cout << "测试 Cart::add方法---------------" << endl;
    for(i = 0;i<n;i++)
    {
        cout << "请输入第"<< i+1 <<"个订单信息"<<endl;
        cin >> gid >> gnum;
        c.add(new Order(gid,gnum));
    }
    //测试Cart::print方法
    cout << "你的订单信息如下"<<endl;
    c.print();
    //测试Cart::del方法
    cout <<"测试Cart::del方法, 请输入要删除的订单的产品编号"<<endl;
    cin >> gid;
    c.del(gid);
    cout <<"现在你的订单信息如下"<<endl;
    c.print();
 

}

[ 本帖最后由 hhcxx2006 于 2013-7-2 20:15 编辑 ]
搜索更多相关主题的帖子: 网上 购物车 public 交易系统 
2013-07-02 20:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
既然是C++,竟还print函数,你看C++标准库中哪个类有这么B的做法?
2013-07-03 08:20
hhcxx2006
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-11-14
得分:0 
回复 2楼 rjsp
饿,这只是一道题而已,现在只是初学教学,这么写也不违反C++的语法规则吧
2013-07-03 08:31
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
程序代码:
#include "stdafx.h"
#include <list>
#include <iostream>

class Order//描述订单
{
public:
    Order(int gid, int gnum)
    {
        goods_id = gid;
        goods_number = gnum;
    }
    void print()
    {
        std::cout << "有商品编号:" << goods_id << ",件数" << goods_number << std::endl;
    }
    int getID() {return goods_id;}

private:
    int goods_id; //商品编号
    int goods_number;//商品数量
};

class Cart//描述购物车, 存储了多了产品的订单
{
public: 
    Cart() {}
    ~Cart()
    {
        for (std::list<Order*>::iterator itr = l_goods.begin(); itr != l_goods.end(); ++itr)
        {
            delete (*itr);
        }
    }

public:
    void add(Order* or) {l_goods.push_back(or);}
    void print()
    {
        for (std::list<Order*>::iterator itr = l_goods.begin(); itr != l_goods.end(); ++itr)
        {
            (*itr)->print();
        }
    }

    bool del(int gid)
    {
        for (std::list<Order*>::iterator itr = l_goods.begin(); itr != l_goods.end(); ++itr)
        {
            if(gid == (*itr)->getID())
            {
                l_goods.erase(itr);
                return true;
            }
        }
        return false;
    }
private:
    std::list<Order*> l_goods;//存储了多了产品的订单
};

void main()
{
    Cart c;
    int n,i;
    int gid,gnum;
    std::cout << "你要订购多少商品" <<std::endl;
    std::cin >> n;
    //测试 Cart::add方法
    std::cout << "测试 Cart::add方法---------------" << std::endl;
    for(i = 0;i<n;i++)
    {
        std::cout << "请输入第"<< i+1 <<"个订单信息"<<std::endl;
        std::cin >> gid >> gnum;
        c.add(new Order(gid,gnum));
    }
    //测试Cart::print方法
    std::cout << "你的订单信息如下"<<std::endl;
    c.print();
    //测试Cart::del方法
    std::cout <<"测试Cart::del方法, 请输入要删除的订单的产品编号"<<std::endl;
    std::cin >> gid;
    c.del(gid);
    std::cout <<"现在你的订单信息如下"<<std::endl;
    c.print();
}


可能代码逻辑会有BUG,答题思路就是这样...
顺便说一句,你基础太差了,很多语法错误...
再顺便多说一句,我故意把注释删了,你应该能看懂的...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-07-03 08:33
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:5 
顺便吐槽一下,你说你就两个函数不会写
这个代码一共只有两个函数

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-07-03 14:09
hhcxx2006
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-11-14
得分:0 
回复 5楼 peach5460
额,不管怎么样,先谢了,论坛是用来学习的地方,不是自己了不起就来炫耀的,都说了,这只是一道题而已,什么叫有很多语法错误,就算有,也是题的错误,我只是原封不动的将题目复制粘贴过来而已,更何况还没有语法错误,你这不是误人子弟吗,再顺便说一句,这个回复只是出于礼貌而已,根本就没看你的代码,我已经交了作业了,不过告诉你一句,你把注释删了是想说明什么,附加一句,我就喜欢看删了注释的代码,这个是我的擅长,再顺便说一句,我只是一个高二的高中生而已,还有,你说只有两个函数,你这不是眼瞎吗,我已经不愿再吐槽了

[ 本帖最后由 hhcxx2006 于 2013-7-4 09:44 编辑 ]
2013-07-04 09:28
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
以下是引用hhcxx2006在2013-7-4 09:28:05的发言:

额,不管怎么样,先谢了,论坛是用来学习的地方,不是自己了不起就来炫耀的,都说了,这只是一道题而已,什么叫有很多语法错误,就算有,也是题的错误,我只是原封不动的将题目复制粘贴过来而已,更何况还没有语法错误,你这不是误人子弟吗,再顺便说一句,这个回复只是出于礼貌而已,根本就没看你的代码,我已经交了作业了,不过告诉你一句,你把注释删了是想说明什么,附加一句,我就喜欢看删了注释的代码,这个是我的擅长,再顺便说一句,我只是一个高二的高中生而已,还有,你说只有两个函数,你这不是眼瞎吗,我已经不愿再吐槽了


可能是因为放暑假了吧,坛子里多了很多不知所谓的人...
1,我没有炫耀自己
2,我只是提出你除了两个函数没写以外,代码本身也存在很多语法错误,希望你能再去看书学习一下
3,你再说没有语法错误,我下贴跟你指出来
4,我删了注释是想你自己不看代码的情况下自己跟一下代码步骤...不是想炫耀什么,谢谢,这里面没有什么很高深的东西,删了注释,只是希望你自己看一下,看不懂的去翻书...
5,存在技术含量的只有两个函数...谢谢...就算我眼瞎了,我的心不瞎,谢谢你的关心

看来真的是放暑假了,玩WOW碰到的脑残数量明显增加...
有时候真的难以分辨互联网对面和你聊天的人到底是人还是狗...

[ 本帖最后由 peach5460 于 2013-7-4 11:29 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-07-04 11:23
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
除了你问的问题以外,这题至少还有两个问题
1,class Cart//描述购物车, 存储了多了产品的订单
{
public:
    void add(Order* or);//增加一个订单
    void print();//显示所有订单信息
    bool del(int gid); //如果有商品编号为gid的订单就删除,并返回true,否则返回false
private:
    list l_goods;//存储了多了产品的订单
};

list没有写类型,肯定编译不过

2,按照你的add函数的参数,我给你写的是
std::list<Order*>

但是,你这个Cart类使用默认的构造和析构函数
那么肯定内存泄漏

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-07-04 11:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-416541-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055395 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved