该程序有错误,求指导
// hw.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<string.h>
#define MAX_STR_LEN 256
//#define MAX_STR_LEN 32
#define ISAUDIO 1
#define ISVIDEO 2
#define ISNULL 0
using namespace std;
class Media
{
friend void setA(Media &medium,char *n,char* c);
public:
Media(char *n,char *c);
Media();
~Media();
char * getName(char *str);
char * getCompany(char *str);
virtual void showInfo() const;
static int getObjNum();
void setType(int t);
void setName(char * name);
void show1();
void show();
bool operator !();
private:
char *name;
char * company;
int type;
static int objNum;
};
Media::Media(char *n,char *c)
{
name=new char[strlen(n)+1];
strcpy(name,n);
company=new char[strlen(c)+1];
strcpy(company,c);
type=ISNULL;
name=NULL;
objNum++;
}
Media::~Media()
{
if(name!=NULL)
delete []name;
if(company!=NULL)
delete []company;
objNum--;
}
void Media::showInfo() const
{
cout<<"Name:"<<this->name<<endl;
cout<<"Company:"<<this->company<<endl;
}
void Media::show()
{
cout<<"Media object."<<endl;
}
char *Media::getName(char *str)
{
strcpy(str,name);
return str;
}
char *Media::getCompany(char *str)
{
strcpy(str,company);
return str;
}
void Media::setName(char * n)
{
if(name!=NULL)
delete [] name;
if(n!=NULL)
{
name=new char[strlen(n)+1];
strcpy(name,n);
}
else
name=NULL;
}
void Media::setType(int t)
{
if(t==ISAUDIO||t==ISVIDEO)
type=t;
}
void Media::show1()
{
cout<<name<<"is a";
if(type==ISAUDIO)
cout<<"audio disc.";
else if(type==ISVIDEO)
cout<<"video disc.";
}
bool Media::operator !()
{
if(name==NULL||strlen(name)==0)
return true;
return false;
if(company==NULL||strlen(company)==0)
return true;
return false;
}
void setA(Media &medium,char *n,char*c)
{
medium.name=n;
medium.company=c;
}
int Media::objNum=0;
int Media::getObjNum()
{
return objNum;
}
class AudioMedia:public Media
{
public:
AudioMedia(int num,char *n,char *c,char *s);
AudioMedia();
~AudioMedia();
char * getSinger(char *str);
void showInfo() const;
void show();
private:
int no;
char * singer;
};
AudioMedia::AudioMedia(int num,char *n,char *c,char*s)
:Media(n,c)
{
no=num;
singer=new char[strlen(s)+1];
strcpy(singer,s);
}
AudioMedia::~AudioMedia()
{
if(singer!=NULL)
delete []singer;
}
void AudioMedia::showInfo() const
{
Media::showInfo();
cout<<"Singer:"<<this->singer<<endl;
}
void AudioMedia::show()
{
cout<<"AudioMedia object."<<endl;
}
char *AudioMedia::getSinger(char *str)
{
strcpy(str,singer);
return str;
}
class VideoMedia:public Media
{
public:
VideoMedia(char *n,char *c,char *d,char *a);
~VideoMedia();
char * getDirector(char *str);
char * getActor(char *str);
void showInfo() const;
private:
char *director;
char *actor;
};
VideoMedia::VideoMedia(char *n,char *c,char *d,char *a)
:Media(n,c)
{
director=new char[strlen(d)+1];
strcpy(director,d);
actor=new char[strlen(a)+1];
strcpy(actor,a);
}
VideoMedia::~VideoMedia()
{
if(director!=NULL)
delete[]director;
if(actor!=NULL)
delete[]actor;
}
void VideoMedia::showInfo() const
{
Media::showInfo();
cout<<"Director:"<<this->director<<endl;
cout<<"Actor:"<<this->actor<<endl;
}
char *VideoMedia::getDirector(char *str)
{
strcpy(str,director);
return str;
}
char *VideoMedia::getActor(char *str)
{
strcpy(str,actor);
return str;
}
class Shelf{
public:
Shelf();
int add(int t,char * n);
void list();
private:
Media media[MAX_STR_LEN];
int num;
};
Shelf::Shelf()
{
num=0;
}
int Shelf::add(int t,char * n)
{
if(num>=MAX_STR_LEN)
return 0;
media[num].setType(t);
media[num].setName(n);
num++;
return 1;
}
void Shelf::list()
{
int i;
for(i=0;i<num;i++)
{
cout<<"No."<<i+1<<":";
media[i].show1();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Shelf shelf;
shelf.add(ISAUDIO,"The Color of My Love");
shelf.add(ISAUDIO,"Thriller");
shelf.add(ISVIDEO,"Forrest Gump");
shelf.add(ISVIDEO,"Slumdog Millionaire");
shelf.list();
Media medium("Slumdog Millionaire","Celador Films");
if(!medium)
cout<<"medium is NULL!"<<endl;
else
cout<<"medium is not NULL!"<<endl;
AudioMedia audio(1,"The Color of My Love","Columbia","Celine Dion");
VideoMedia video("Forrest Gump","Paramount Pictures","Robert Zemeckis","Tom Hanks");
cout<<"Audio Media:"<<endl;
audio.showInfo();
cout<<endl;
cout<<"Video Media:"<<endl;
video.showInfo();
cout<<endl;
char strBuffer[MAX_STR_LEN];
Media *mPtr;
mPtr=&medium;
cout<<"Accessing Media object through Media*:"<<endl;
cout<<"Name:"<<mPtr->getName(strBuffer)<<endl;
cout<<"Company:"<<mPtr->getCompany(strBuffer)<<endl;
cout<<endl;
mPtr=&audio;
cout<<"Accessing AudioMedia object through Media*:"<<endl;
//cout<<"Name:"<<mPtr->getName(strBuffer)<<endl;
//cout<<"Company:"<<mPtr->getCompany(strBuffer)<<endl;
//cout<<"Singer:"<<((AudioMedia*)mPtr)->getSinger(strBuffer)<<endl;
mPtr->showInfo();
cout<<endl;
mPtr=&video;
cout<<"Accessing VideoMedia object through Media*:"<<endl;
cout<<"Name:"<<mPtr->getName(strBuffer)<<endl;
cout<<"Company:"<<mPtr->getCompany(strBuffer)<<endl;
cout<<"Director:"<<((VideoMedia*)mPtr)->getDirector(strBuffer)<<endl;
cout<<"Actor:"<<((VideoMedia*)mPtr)->getActor(strBuffer)<<endl;
cout<<endl;
AudioMedia *amPtr;
amPtr=(AudioMedia*)&medium;
cout<<"Accessing Media object through AudioMedia*:"<<endl;
cout<<"Name:"<<amPtr->getName(strBuffer)<<endl;
cout<<"Company:"<<amPtr->getCompany(strBuffer)<<endl;
//cout<<"Singer:"<<amPtr->getSinger(strBuffer)<<endl;
cout<<endl;
amPtr=&audio;
cout<<"Accessing AudioMedia object through AudioMedia*:"<<endl;
cout<<"Name:"<<amPtr->getName(strBuffer)<<endl;
cout<<"Company:"<<amPtr->getCompany(strBuffer)<<endl;
cout<<"Singer:"<<amPtr->getSinger(strBuffer)<<endl;
cout<<endl;
medium.showInfo();
setA(medium,"s","c");
medium.showInfo();
AudioMedia am2(2,"Thriller","Abm","Michael Jackson");
FILE * fptr;
if((fptr=fopen("am.dat","wb"))!=NULL)
{
fwrite(&medium,sizeof(AudioMedia),1,fptr);
fwrite(&am2,sizeof(AudioMedia),1,fptr);
fclose(fptr);
}
else
cout<<"Open file or create file error."<<endl;
int no;
cout<<"Please input an integer:";
while(cin>>no)
{
try
{
if((no%2)==0)
throw Media();
else
throw AudioMedia();
}
catch(Media & b)
{
cout<<"Exception:";
b.show();
}
catch(AudioMedia & audio)
{
cout<<"Exception:";
audio.show();
}
cout<<"Please input an integer:";
}
cout<<"There is"<<Media::getObjNum()<<"media."<<endl;
{
Media one(10);
Media *ptr=&one;
cout<<"After media one created,there is"
<<one.getObjNum()<<"media."<<endl;
{
Media two(10);
cout<<"After media two created,there is"
<<two.getObjNum()<<"media."<<endl;
}
cout<<"After media two destroyed,there is"
<<ptr->getObjNum()<<"media."<<endl;
}
cout<<"After media one destroyed,there is"
<<Media::getObjNum()<<"media."<<endl;
return 0;
}
[解决办法]
你最好把错误信息贴出来,整这么一堆代码,又不告诉错误,看的晕。
[解决办法]
你自己调试吗? 都是基本错误 如果自己经过调试还发现不了错误 那么自己得注意(基础很不扎实)
[解决办法]
针对基础不扎实可以去借本比较经典的书籍把基础知识补补
[解决办法]
一般人还真没耐心看
[解决办法]
都是编译的基本错误,类型转换,构造函数等有问题,建议多看点C++类的例子。
[解决办法]
缺少构造函数:
Media::Media(int){//definition}开始学,就搞这个。唉。