Дочерние классы C++
В чем проблема??????????
#include <iostream>
#include <tchar.h>
using namespace std;
class Animal
{
public:
int count;
char *Title;
char *Says;
Animal(char *t);
virtual void speak(void) = 0;
virtual ~Animal();
};
Animal::Animal(char *t)
{
count = strlen(t);
Title = new char[count];
strcpy(Title,t);
}
Animal::~Animal()
{
cout << Title << " ДОСВИДАНИЕ СКАЗАЛО ЖИВОТНОЕ" << endl<< endl;
}
class Frog:public Animal
{
public:
Frog(char *t);
virtual void speak(void);
virtual ~Frog();
};
Frog::Frog(char *t):
Animal(t) {}
Frog::~Frog()
{
cout << Title << " ДОСВИДАНИЕ СКАЗАЛО ЖИВОТНОЕ" << endl<< endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
Animal *animals[4];
char name[10];
animals[0]=new Frog(name);
}
Ответы (2 шт):
Автор решения: Mikhailo
→ Ссылка
Основная проблема в том, что speak() у вас не определена, а она нужна для таблицы виртуальных функций. Сообветственно, получаете ошибку линковки о неразрешенном внешнем символе.
Еще VC++ ругается на небезопасную функцию strcpy.
А вообще что за викторина? Это вам известно, что за проблема, и ее (сообщение компилятора) надо написать в вопросе.
Автор решения: JohnDoe
→ Ссылка
Плюс к вышесказанному:
Animal::~Animal()
{
cout << Title << " ДОСВИДАНИЕ СКАЗАЛО ЖИВОТНОЕ" << endl << endl;
if (NULL != Title) // иначе будет утечка памяти
delete[] Title;
}
Ну и аналогично, если есть
animals[0] = new Frog(name);
то должно быть
delete animals[0];