首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

该程序有异常,求指导

2013-01-02 
该程序有错误,求指导// hw.cpp : 定义控制台应用程序的入口点。//#include stdafx.h#includeiostream#i

该程序有错误,求指导
// 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}


开始学,就搞这个。唉。

热点排行