Дочерние классы C++

Рейтинг: -2Ответов: 2Опубликовано: 24.02.2023

В чем проблема??????????

#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);
}

Ответы

▲ 1

Основная проблема в том, что speak() у вас не определена, а она нужна для таблицы виртуальных функций. Сообветственно, получаете ошибку линковки о неразрешенном внешнем символе.

Еще VC++ ругается на небезопасную функцию strcpy.

А вообще что за викторина? Это вам известно, что за проблема, и ее (сообщение компилятора) надо написать в вопросе.

▲ 1

Плюс к вышесказанному:

Animal::~Animal()
{
    cout << Title << " ДОСВИДАНИЕ СКАЗАЛО ЖИВОТНОЕ" << endl << endl;
    if (NULL != Title) // иначе будет утечка памяти
        delete[] Title;
}

Ну и аналогично, если есть

animals[0] = new Frog(name);

то должно быть

delete animals[0];