| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 642 人关注过本帖
标题:一段C++代码,请能读懂的朋友在每句代码后面用“//”进行标注解释!谢谢!
只看楼主 加入收藏
ccnky123
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
一段C++代码,请能读懂的朋友在每句代码后面用“//”进行标注解释!谢谢!
这学期刚开始学C++,老师给了段代码要我们分析,读不懂啊,而且老师讲知识喜欢穿插讲,很多没学过的内容都写进代码里了!请朋友帮忙!代码如下:
第一题
#include "stdafx.h"
#include "iostream.h"
#include "string.h"
#include "malloc.h"

struct item{
    char name[20];
    long number;
};
class PhoneBook{
    int n;
    struct item *p;
    public:
        PhoneBook(int);
        ~PhoneBook();
        void setname(int,char*);
        void setnumber(char*,long);
        void print();
};
PhoneBook::PhoneBook(int x){
    n=x;
    p=(struct item*)calloc(n,sizeof(struct item));
}
PhoneBook::~PhoneBook (){
     free(p);
}
void PhoneBook::setname (int a,char* b){
    strcpy((p+a)->name ,b);
}
void PhoneBook::setnumber (char* a,long b){
    for (int i=0;i<n;i++){
        if (strcpy((p+i)->name ,a)==0)
            (p+i)->number =b;
    }
   
}
void PhoneBook::print (){
    for (int i=0;i<n;i++){
        cout<<"name="<<(p+i)->name;
        cout<<"number="<<(p+i)->number;
    }
}

int main(int argc, char* argv[])
{
    PhoneBook a(10);


    a.setname(0,"aaaa");
    a.setname(1,"bbbb");
    a.setname(2,"cccc");
    a.setname(3,"dddd");
    a.setname(4,"eeee");

    a.setnumber("aaaa",1111);
    a.setnumber("bbbb",2222);
    a.setnumber("cccc",3333);
    a.setnumber("dddd",4444);
    a.setnumber("eeee",5555);

    a.print ();

    return 0;
}
第二题
#include "stdafx.h"
#include "malloc.h"
#include "string.h"
#include "iostream.h"

struct item{
    char name[20];
    long number;
};
class PhoneBook{ //类的声明
    int current;
    int n;
    struct item *p;
    public:
        PhoneBook(int);
        ~PhoneBook();
        void setname(int,char*);
        void setnumber(int,long);

        long& operator()(char*);

        PhoneBook& operator()(int);
        void operator=(char*);
   
        long operator[](char*);
        char* operator[](long);

        void print();

};
//类的定义
long PhoneBook::operator [](char* x){
        for (int i=0;i<n;i++){
            if (strcmp((p+i)->name,x)==0)
                return (p+i)->number;
        }
}
char* PhoneBook::operator [](long x){
    for (int i=0;i<n;i++){
        if ( (p+i)->number==x)
            return (p+i)->name;
    }
}
void PhoneBook::operator =(char* a){
    strcpy((p+current)->name, a);
}
PhoneBook& PhoneBook::operator ()(int a){
    current=a;
    return *this;
}
void PhoneBook::print(){
    for (int i=0;i<n;i++)
        cout<<"name="<<(p+i)->name<<" number="<<(p+i)->number<<endl;

}
long& PhoneBook::operator ()(char* a){
    for (int i=0;i<n;i++){
        if (strcmp((p+i)->name,a)==0)
            return (p+i)->number;
    }
}
void PhoneBook::setnumber(int a,long b){
    (p+a)->number =b;
}
void PhoneBook::setname(int a,char* b){
    strcpy((p+a)->name,b);
}
PhoneBook::PhoneBook(int a){
    n=a;
    p=(struct item*)calloc(n,sizeof(struct item));
}
PhoneBook::~PhoneBook(){
    free(p);
}

//----------------------------------
int main(int argc, char* argv[])
{
    PhoneBook a(10);
    a(0)="hahaha0";
    a(1)="hahaha1";
    a(2)="hahaha2";
    a(3)="hahaha3";
    a(4)="hahaha4";
    a(5)="hahaha5";
    a(6)="hahaha6";
    a(7)="hahaha7";
    a(8)="hahaha8";
    a(9)="hahaha9";
    a("hahaha0")=12345;
    a("hahaha1")=54321;
    a("hahaha2")=1234;
    a("hahaha3")=5431;
    a("hahaha4")=1345;
    a("hahaha5")=5321;
    a("hahaha6")=1345;
    a("hahaha7")=5421;
    a("hahaha8")=13345;
    a("hahaha9")=53421;
    a.print();

    cout<<"hahaha7 's number is "<<a["hahaha7"]<<endl;
    cout<<"13345 's name is "<<a[13345]<<endl;

    return 0;
}
搜索更多相关主题的帖子: 朋友 
2011-05-14 22:02
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:7 
这代码 有压力  老师写的?
2011-05-14 22:11
ccnky123
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-14
收藏
得分:0 
是的,都看不懂,想对着书看着自学,又不知道是哪部分的内容。
2011-05-14 22:23
ccnky123
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-14
收藏
得分:0 
回复 楼主 ccnky123
请问你能帮帮我吗?就大概说一下,我想找到对应的章节好自学~
2011-05-14 22:39
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
类的定义
成员函数在类外的定义
动态内存开辟 释放
类的实例化(定义对象)
成员函数的调用
对象的销毁


函数重载(函数签名)
运算符重载(operator关键字)
2011-05-14 23:20
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:7 
我来说一个吧。高手别笑我哈
程序代码:
//#include "stdafx.h"
#include "iostream.h"
#include "string.h"
#include "malloc.h"

struct item{               //结构体
    char name[20];
    long number;
};
class PhoneBook{                   //
    int n;                     //私有成员 int n;
    struct item *p;             //私有成员 item 指针
    public:                     //公有接口
        PhoneBook(int);           //声明构造函数
        ~PhoneBook();               //声明析构函数
        void setname(int,char*);    // 声明接口
        void setnumber(char*,long); //声明接口
        void print();                  //声明接口
};

 //定义构造函数
PhoneBook::PhoneBook(int x){
    n=x;
    p=(struct item*)calloc(n,sizeof(struct item)); //申请n个item内存空间
} 


 //定义析构函数
PhoneBook::~PhoneBook (){
     free(p);            // 释放内存
}

void PhoneBook::setname (int a,char* b){
    strcpy((p+a)->name ,b);       // 把 字串 b 拷贝到 第 (a+1)个位置上的name中
}
void PhoneBook::setnumber (char* a,long b){
    for (int i=0;i<n;i++){            //遍历 item
        if (strcpy((p+i)->name ,a)==0)   //如果拷贝结果为空
            (p+i)->number =b;             //把当前item的number设置为b
    }
   
}
void PhoneBook::print (){     //输出    类似重载 operator<<()
    for (int i=0;i<n;i++){        // 遍历 item
        cout<<"name="<<(p+i)->name;  // 输出 当前item 的name项
        cout<<"  number="<<(p+i)->number;// 输出 当前item 的item项
        cout << endl;//  加个格式
    }
}

int main(int argc, char* argv[])
{
    PhoneBook a(10);     //定义obj,用10初始化 

//下面的不用说了吧?
    a.setname(0,"aaaa");
    a.setname(1,"bbbb");
    a.setname(2,"cccc");
    a.setname(3,"dddd");
    a.setname(4,"eeee");

    a.setnumber("aaaa",1111);
    a.setnumber("bbbb",2222);
    a.setnumber("cccc",3333);
    a.setnumber("dddd",4444);
    a.setnumber("eeee",5555);

    a.print ();

    return 0;
}

2011-05-14 23:29
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:0 
只是运行结果有点让我意外。等明天再看。
2011-05-14 23:31
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
收藏
得分:7 
这段代码仔细看很简单的,基本上是基于对象设计中算容易的。
思考都挺简单。
没有容错处理,没有try块,catch块。
根本不用考虑对象会不会释放,建立会不会成功。。
2011-05-15 06:55
ccnky123
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-14
收藏
得分:0 
谢谢各位的答复。学习就是这样,基本知识要学扎实。我们老师可能比较忽悠人吧,我们不怕东西难。基础知识没学好,一上来就整本书的内容都用上了来写代码,哪个学生受得了?
2011-05-15 08:36
ccnky123
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-14
收藏
得分:0 
回复 8楼 lyj23
我的QQ75937176,请问可以加你好友吗?还想问您一些问题
2011-05-15 08:45
快速回复:一段C++代码,请能读懂的朋友在每句代码后面用“//”进行标注解释!谢 ...
数据加载中...
 
   



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

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