Inheritance with builders

Asked

Viewed 2,575 times

3

I need to create a base class animal and 3 other hereditary classes of other animals. Each class must have its own function emitirSom. They should be invoked polymorphically through a vector. I don’t know if the constructor was done right. Type, the constructor must be made in the base class or the hereditary classes?

Tela de erro

Error messages:

main.cpp(15): error C2661: 'dog::dog': no overloaded function takes 2 arguments

main.cpp(16): error C2661: 'cow::cow': no overloaded function takes 2 arguments

main.cpp(17): error C2661: 'cat::cat': no overloaded function takes 2 arguments

Header. h

#include <string>
using namespace std;

class animal
{
protected:
    string nome;
    int idade;
public:
    animal(const string &nome_, int idade_);
    virtual void emitirSom() const = 0;
};

class cachorro : public animal
{
public:
    virtual void emitirSom() const;
};

class vaca : public animal
{
    virtual void emitirSom() const;
};

class gato: public animal
{
    virtual void emitirSom() const;
};

Implmentation.cpp

#include "stdafx.h"
#include "header.h"
#include <iostream>
#include <string>
using namespace std;

animal::animal(const string &nome_, int idade_)
{
    nome = nome_;
    idade = -idade_;
}
void cachorro::emitirSom() const
{
    cout << "\n" << nome << "latindo: Aauauauauau";
}

void gato::emitirSom() const
{
    cout << "\n" << nome << "miando: MiauMiau";
}

void vaca::emitirSom() const
{
    cout << "\n" << nome << "mugindo: Muuuuuuu";
}

Main.cpp

#include "stdafx.h"
#include "header.h"
#include <vector>

void fazerBarulho(const animal* const &bicho)
{
    bicho->emitirSom();
}

int main()
{
    cachorro toby("Toby", 8);
    vaca lili("Lili",29);
    gato satanas("Satanas",3);

    vector < animal * > zoo( 3 );

    zoo[0] = &toby;
    zoo[1] = &lili;
    zoo[2] = &satanas;

    for (size_t i = 0; i < zoo.size(); ++i)
        fazerBarulho(zoo[0]);
#if WIN32
    system("PAUSE");
#endif
}
  • Does the image have a purpose? It looks horribly rendered next to the question in the mobile version of the site

  • 1

    It’s the error screen. Pera I’ll copy the text

  • Related: https://answall.com/q/73530/64969

  • now reading the error message I managed to understand your doubt, +1

1 answer

4


You need to create the derivate class constructors and call the base class constructor. You have a syntax of your own for this. There were a few more mistakes that I corrected.

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class animal
{
protected:
    string nome;
    int idade;
public:
    animal(const string &nome_, int idade_);
    virtual void emitirSom() const = 0;
};

class cachorro : public animal
{
public:
    cachorro(const string &nome_, int idade_);
    virtual void emitirSom() const;
};

class vaca : public animal
{
public:
    vaca(const string &nome_, int idade_);
    virtual void emitirSom() const;
};

class gato: public animal
{
public:
    gato(const string &nome_, int idade_);
    virtual void emitirSom() const;
};

animal::animal(const string &nome_, int idade_)
{
    nome = nome_;
    idade = -idade_;
}

cachorro::cachorro(const string &nome_, int idade_) : animal(nome_, idade_) {}

void cachorro::emitirSom() const
{
    cout << "\n" << nome << "latindo: Aauauauauau";
}

gato::gato(const string &nome_, int idade_) : animal(nome_, idade_) {}

void gato::emitirSom() const
{
    cout << "\n" << nome << "miando: MiauMiau";
}

vaca::vaca(const string &nome_, int idade_) : animal(nome_, idade_) {}

void vaca::emitirSom() const
{
    cout << "\n" << nome << "mugindo: Muuuuuuu";
}

void fazerBarulho(const animal* const &bicho)
{
    bicho->emitirSom();
}

int main()
{
    cachorro toby("Toby", 8);
    vaca lili("Lili",29);
    gato satanas("Satanas",3);

    vector < animal * > zoo( 3 );

    zoo[0] = &toby;
    zoo[1] = &lili;
    zoo[2] = &satanas;

    for (size_t i = 0; i < zoo.size(); ++i)
        fazerBarulho(zoo[i]);
}

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.