Компилятор выдаёт ошибку, в чем дело?? - C++
Формулировка задачи:
Задание:
1. Определить иерархию классов (в соответствии с вариантом). Базовый класс должен включать обязательный атрибут char *name.
2. Написать демонстрационную программу, в которой создаются объекты различных классов и, по требованию, вызывается метод Show() первого элемента с выводом результата на экран.
11 вариант: млекопитающее, парнокопытное, животное;
//---------------------------------------------------------------------------
#pragma hdrstop
#include <vcl.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
//---------------------------------------------------------------------------
#pragma argsused
#include<iostream.h>
class animal{
protected:
char* vid;
public:
animal();
animal(char*);
animal(animal&v);
};
animal::animal(){
vid=new char[25];
strcpy(vid,"hischik");
printf("Object animal constructor bezparametrs \n");
}
animal::animal(char*v){
vid=new char[strlen(v)+1];
strcpy(vid,v);
printf("Object animal constructor s parametrs \n");
}
animal::animal(animal&c){
vid=new char[strlen(c.vid)+1];
strcpy(vid,c.vid);
printf("Object animal CopyConstructor\n");
}
class mlec {
protected:
char* obitanie;
public:
mlec();
mlec(char*);
mlec(mlec&o);
};
mlec::mlec(){
obitanie=new char[25];
strcpy(obitanie,"Afrika");
printf("Object mlec constructor bezparametrs\n");
}
mlec::mlec(char*o){
obitanie=new char[strlen(o)+1];
strcpy(obitanie,o);
printf("Object mlec constructor s parametrs\n");
}
mlec::mlec(mlec&c){
obitanie=new char [strlen(c.obitanie)+1];
strcpy(obitanie,c.obitanie);
printf("Object mlec CopyConstructor\n");
}
class parno_kop:public animal,mlec{
private:
int kol_nog;
public:
parno_kop;
parno_kop(int, char*, char*);
parno_kop(parno_kop&k);
void show();
~parno_kop();
};
parno_kop::parno_kop():animal(),mlec(){
kol_nog=4;
printf("Object parno_kop constructor bez parametrs\n");
}
parno_kop::parno_kop(int k, char*v, char*o):animal(v),mlec(o)
{
kol_hog=k;
printf("Object parno_kop constructor s parametrs\n");
}
parno_kop::parno_kop(parno_kop&k){
kol_nog=k.kol_nog;
vid=new char[strlen(c.vid)+1];
strcpy(vid,k.vid);
obitanie=new char [strlen(t.obitanie)+1];
strcpy[obitanie,k.obitanie];
printf("Object parno_kop CopyConstructor\n");
}
void parno_kop::show(){
printf("vid = %s\n",vid);
printf("obitanie = %s\n",obitanie);
printf("kol_nog = %d\n",kol_nog);
}
parno_kop::~parno_kop(){
delete[]kol_nog;
}
int main(int argc, char* argv[])
{
parno_kop s1;
s1.show();
parno_kop s2(2,"hischik","afrika");
s2.show();
parno_kop s3(s2);
s3.show();
getch();
return 0;
}Решение задачи: «Компилятор выдаёт ошибку, в чем дело??»
textual
Листинг программы
#include <cstring>
#include <cstdio>
class Animal {
public:
Animal() : name_(NULL) {}
explicit Animal(const char *name) : name_(NULL) {
SetName(name);
}
void SetName(const char *name) {
delete [] name_;
name_ = strcpy(new char[strlen(name) + 1], name);
}
char *GetName() const {
return name_;
}
virtual void Print() {
printf("Name: %s\n", GetName());
}
private:
char *name_;
};
class Mammalia : public Animal {
public:
Mammalia() : Animal(), habitat_(NULL) {}
Mammalia(char *name, char *habitat)
: Animal(name), habitat_(NULL) {
SetHabitat(habitat);
}
void SetHabitat(const char *habitat) {
delete [] habitat_;
habitat_ = strcpy(new char[strlen(habitat) + 1], habitat);
}
char *GetHabitat() const {
return habitat_;
}
virtual void Print() {
printf("Name: %s\n", GetName());
printf("Habitat: %s\n", GetHabitat());
}
private:
char *habitat_;
};
class Artiodactyla : public Mammalia {
public:
Artiodactyla() : Mammalia(), leg_number_(0) {}
Artiodactyla(char *name, char *habitat, size_t leg_number)
: Mammalia(name, habitat), leg_number_(leg_number) {}
void SetLegNumber(size_t leg_number) {
leg_number_ = leg_number;
}
size_t GetLegNumber() const {
return leg_number_;
}
virtual void Print() {
printf("Name: %s\n", GetName());
printf("Habitat: %s\n", GetHabitat());
printf("Leg number: %d\n", GetLegNumber());
}
private:
size_t leg_number_;
};
int main(int argc, char **argv) {
Artiodactyla pig("Piggie", "Africa", 4);
pig.Print();
return 0;
}