关于C++的一个简单的题目,急求

二、面向对象编程(50分)【题目要求】1.按以下描述和要求建立一个类Course,完善类中所有成员函数的代码。执行主函数对其测试。按每个函数的完成情况得分。Course私... 二、面向对象编程 (50分)

【题目要求】1. 按以下描述和要求建立一个类Course,完善类中所有成员函数的代码。执行主函数对其测试。按每个函数的完成情况得分。
Course

私有成员

char Num[10]; //课程代码

char *Name; //课程名称

int Hour; //课时数

int Credit; //学分数

公有成员

Course(char *nu=0, char *na=0,int h=0, int c=0);

//带缺省值的构造函数。

Course (Course &c); //拷贝构造函数

~ Course (); //析构函数,释放分配的内存

void set (char *na,int h,int c); //修改课程名称、课时、学分

void display(); //输出课程信息(各数据成员的值)

Course operator ++(int); //后置自增的运算符重载,要求课时数加16,学分加1。

2. 头文件包含语句为:

#include <iostream.h>

#include <string.h>

3. 测试数据:

对象A:"990001", "C++程序设计(上)", 64, 4

对象B:"990002", "C++程序设计(下)", 64, 4

对象C:由对象A拷贝生成。

4. 测试程序的主函数为:

void main()

{

Course A("990001", "C++程序设计(上)", 64, 4), B("990002", "C++程序设计(下)", 64, 4),C(A);

A.display();

B.display();

C.display();

A++;

A.display();

B.set("C++程序设计(下)(非电)", 80, 5);

B.display();

}

【相关提示】包含<string.h>头文件可使用串复制函数strcpy(),求串长度函数strlen()。指针成员需要动态分配内存。

【注意事项】 将源程序以文件名“学号_2.cpp”存入Z盘自己的文件夹中。
展开
 我来答
_小鼓励_
2013-08-12
知道答主
回答量:4
采纳率:0%
帮助的人:5.2万
展开全部
#include <iostream.h>
#include <string.h>

using namespace std ;

class Course
{
private:
char Num[10];//课程代码
char *Name;//课程名称
int Hour;//课时数
int Credit;//学分数
public:
Course (char *nu, char *na,int h, int c);//带缺省值的构造函数。
Course (Course &c);//拷贝构造函数
~ Course ();//析构函数,释放分配的内存
void set (char *na,int h,int c);//修改课程名称、课时、学分
void display();//输出课程信息(各数据成员的值)
Course operator ++(int);//后置自增的运算符重载,要求课时数加16,学分加1。
} ;

Course :: Course(char *nu=NULL, char *na=NULL,int h=0, int c=0)//带缺省值的构造函数。
{
strcpy(Num,nu) ;

int len=strlen(na) ;
Name=new char[len] ;
strcpy(Name,na) ;

Hour=h ;

Credit=c ;
}

Course :: Course(Course &c)//拷贝构造函数
{
strcpy(Num,c.Num) ;

int len=strlen(c.Name) ;
Name=new char[len] ;
strcpy(Name,c.Name) ;

Hour=c.Hour ;

Credit=c.Credit ;
}

Course :: ~ Course ()//析构函数,释放分配的内存
{
delete []Name ;
}

void Course :: set (char *na,int h,int c)//修改课程名称、课时、学分
{
int len=strlen(na) ;
Name=new char[len] ;
strcpy(Name,na) ;

Hour=h ;

Credit=c ;
}

void Course :: display()//输出课程信息(各数据成员的值)
{
cout<<Num<<endl ;
cout<<Name<<endl ;
cout<<Hour<<endl ;
cout<<Credit<<endl ;
}

Course Course :: operator ++(int)//后置自增的运算符重载,要求课时数加16,学分加1。
{
Hour+=16 ;
Credit+=1 ;
return *this ;
}

-------------------------------------------------------------

一点点小问题:
1.我编译的时候Course A("990001", "C++程序设计(上)", 64, 4)不合法,编译器认为不能将"990001"等字符串转化为char *。这是编译器的问题,应该没问题吧。
2.我的头文件里没有<iostream.h>只有<iostream>。这是C++版本的问题,请放心使用
--
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有... 点击进入详情页
本回答由--提供
百度网友006959291
2013-08-12 · TA获得超过222个赞
知道答主
回答量:198
采纳率:0%
帮助的人:179万
展开全部

少年,别急, 你再看看我这个?

#include <iostream>
#include <string.h>

using namespace std;

class Course
{
    static const int StepHour = 0x10;
    static const int StepCred = 0x01;
    static const int NumLen = 0x0a;

private:

    char    Num[NumLen];
    char*   Name;
    int     Hour;
    int     Credit;

public:

    Course(const Course& c);
    Course(char* nu = NULL, char* na = NULL, int h = 0, int c = 0);
    ~Course();

    void set(char* na, int h, int c);
    void display();
    Course operator ++ (int);
};

Course::Course( const Course& c )
{
    strcpy(Num, c.Num);

    int len = strlen(c.Name);
    Name = new char[len + 1];
    strcpy(Name, c.Name);

    Hour = c.Hour;

    Credit = c.Credit;
}

Course::Course( char* nu /*= NULL*/, char* na /*= NULL*/, int h /*= 0*/, int c /*= 0*/ )
    : Hour(h)
    , Credit(c)
{
    for (int i=0; i<NumLen; ++i)
        Num[i] = '\0';

    if ( nu )
    {
        strncpy(Num, nu, NumLen);
    }

    if ( na )
    {
        int len = strlen(na);
        Name = new char[len + 1];
        strcpy(Name, na);
    }
    else
    {
        Name = new char[1];
        Name[0] = '\0';
    }
}

Course::~Course()
{
    if ( Name )
    {
        delete [] Name;
    }
}

void Course::set( char* na, int h, int c )
{
    delete [] Name;

    if ( na )
    {
        int len = strlen(na);
        Name = new char[len + 1];
        strcpy(Name, na);
    }
    else
    {
        Name = new char[1];
        Name[0] = '\0';
    }

    Hour = h;

    Credit = c;
}

void Course::display()
{
    cout<<"课程编号:\t"<<Num<<endl;
    cout<<"课程名称:\t"<<Name<<endl;
    cout<<"课时:\t\t"<<Hour<<endl;
    cout<<"学分:\t\t"<<Credit<<endl<<endl;
}

Course Course::operator++( int )
{
    Course temp(*this);

    Hour += StepHour;
    Credit += StepCred;

    return temp;
}

int main()
{

    Course A("990001", "C++程序设计(上)", 64, 4), B("990002", "C++程序设计(下)", 64, 4), C(A);

    A.display();

    B.display();

    C.display();

    A++;

    A.display();

    B.set("C++程序设计(下)(非电)", 80, 5);

    B.display();

    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风若远去何人留
2013-08-12 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450108
专业C/C++软件开发

向TA提问 私信TA
展开全部
完整程序

#include <iostream.h>
#include <string.h>
using namespace std;
class Course
{
private:
char Num[10]; //课程代码
char *Name; //课程名称
int Hour; //课时数
int Credit; //学分数
public:
Course(char *nu=0, char *na=0,int h=0, int c=0); //带缺省值的构造函数。
Course (Course &c); //拷贝构造函数
~ Course (); //析构函数,释放分配的内存
void set (char *na,int h,int c); //修改课程名称、课时、学分
void display(); //输出课程信息(各数据成员的值)
Course operator ++(int); //后置自增的运算符重载,要求课时数加16,学分加1。
};
Course::Course(char *nu, char *na,int h, int c)
{
if(nu) strcpy(Num, nu);
else Num[0] = 0;
if(na)
{
Name = new char[strlen(na) + 1];
strcpy(Name, na);
}
else Name = NULL;
Hour = h;
Credit = c;
}
Course::Course (Course &c)
{
if(c.Num) strcpy(Num, c.Num);
else Num[0] = 0;
if(c.Name)
{
Name = new char[strlen(c.Name) + 1];
strcpy(Name, c.Name);
}
else Name = NULL;
Hour = c.Hour;
Credit = c.Credit;
}
Course::~ Course ()
{
if(Name) delete [] Name;
}
void Course::set (char *na,int h,int c)
{
if(na)
{
if(Name)delete[]Name;
Name = new char[strlen(na) + 1];
strcpy(Name, na);
}
else Name = NULL;
Hour = h;
Credit = c;
}
void Course::display()
{
cout << "课程代码:" << Num << endl;
cout << "课程名称:" << Name << endl;
cout << "课时数:" << Hour << endl;
cout << "学分数:" << Credit << endl;
}
Course Course::operator ++(int)
{
Hour += 16;
Credit ++;
return *this;
}
void main()
{
Course A("990001", "C++程序设计(上)", 64, 4), B("990002", "C++程序设计(下)", 64, 4),C(A);
A.display();
B.display();
C.display();
A++;
A.display();
B.set("C++程序设计(下)(非电)", 80, 5);
B.display();
}

测试输出
课程代码:990001
课程名称:C++程序设计(上)
课时数:64
学分数:4
课程代码:990002
课程名称:C++程序设计(下)
课时数:64
学分数:4
课程代码:990001
课程名称:C++程序设计(上)
课时数:64
学分数:4
课程代码:990001
课程名称:C++程序设计(上)
课时数:80
学分数:5
课程代码:990002
课程名称:C++程序设计(下)(非电)
课时数:80
学分数:5
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式