Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viciado

Classes e Ponteiros

Recommended Posts

Eu fiz uma classe retangulo para aprender a trabalhar com classes e ponteiros:

 

Retangulo.h

#ifndef RETANGULO_H
#define RETANGULO_H


class retangulo
{
   public:
       retangulo(double*, double*);
       void setCoordenadasX(double*);
       void setCoordenadasY(double*);
       double* getPontosX();
       double* getPontosY();
       double altura();
       double largura();
       double perimeter();
       double area();
   private:
       double coordX[2];
       double coordY[2];
};

#endif // RETANGULO_H

 

Retangulo.cpp

#include "retangulo.h"

retangulo::retangulo(double *x, double *y)
{
   coordX[0] = x[0];
   coordX[1] = x[1];
   coordY[0] = y[0];
   coordY[1] = y[1];
}

void retangulo::setCoordenadasX(double *x)
{
   coordX[0] = x[0];
   coordX[1] = x[1];
}

void retangulo::setCoordenadasY(double *)
{
   coordY[0] = y[0];
   coordY[1] = y[1];
}

double* retangulo::getPontosX()
{
   return coordX;
}

double* retangulo::getPontosY()
{
   return coordY;
}

double retangulo::altura()
{
   return (coordY[0] - coordX[0]);
}

double retangulo::largura()
{
   return (coordX[1] - coordX[0]);
}

double retangulo::perimeter()
{
   return ((altura() * 2) + (largura() * 2));
}

double retangulo::area()
{
   return (largura() * altura());
}

 

Main.cpp

#include <iostream>
#include "Retangulo.h"

using namespace std;

int main()
{
   double vet1[2] = {1,5},
       vet2[2] = {4,4};
   retangulo ret1(vet1, vet2);
   cout << "Retangulo 1\nAltura: " << ret1.altura() << "\nLargura: " << ret1.largura()
        << "\nArea: " << ret1.area() << "\nPerimetro: " << ret1.perimeter() << endl;

   /*cout << "Retangulo 2\nAltura: " << ret2.getLenght() << "\nLargura: " << ret2.getWidth()
        << "\nArea: " << ret2.area() << "\nPerimetro: " << ret2.perimeter() << endl;*/

   return 0;
}

 

 

Estou com erro em: undefined reference to 'retangulo::retangulo(double*, double*)'

 

Só que não entendi, estou enviando um vetor para a função. Não está certo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

void retangulo::setCoordenadasY(double *)
{
   coordY[0] = y[0];
   coordY[1] = y[1];
}

 

>>

 

void retangulo::setCoordenadasY(double *y)
{
   coordY[0] = y[0];
   coordY[1] = y[1];
}

 

Você esqueceu de adicionar o Y depois de (double *, ficando (double *y)...

 

É melhor sempre adicionar os nomes das variáveis, tanto no .h quando no .cpp, pois não tem jeito de errar com isso então... ou criar um .h para setar os nomes de variável a serem utilizados e então adicionar para mudar só nesse .h?? Hum... posso pensar nisso... boa ideia xD

 

 

OBS: Aprenda a usar um depurador (debugger) e a interpretar erros do seu compilador... ambos ajudam muito em horas de bugs/não compilação...

 

 

Abraços :D

 

 

@edit:

 

LoL, o código abaixo dá certo... mas não recomendo que façam isso pois fica difícil de saber o nome da variável... Para propósitos de exemplo somente xD

 

names.h

#ifndef NAMES_H
#define NAMES_H

// Defining names for variables
#define DOUBLE_COORD_X x
#define DOUBLE_COORD_Y y



#endif

 

retangulo.h

#ifndef RETANGULO_H
#define RETANGULO_H

#include "names.h"


class retangulo
{
   public:
       retangulo(double *DOUBLE_COORD_X, double *DOUBLE_COORD_Y);
       void setCoordenadasX(double *DOUBLE_COORD_X);
       void setCoordenadasY(double *DOUBLE_COORD_Y);
       double* getPontosX();
       double* getPontosY();
       double altura();
       double largura();
       double perimeter();
       double area();
   private:
       double coordX[2];
       double coordY[2];
};

#endif // RETANGULO_H

 

retangulo.cpp

#include "retangulo.h"

retangulo::retangulo(double *DOUBLE_COORD_X, double *DOUBLE_COORD_Y)
{
   coordX[0] = x[0];
   coordX[1] = x[1];
   coordY[0] = y[0];
   coordY[1] = y[1];
}

void retangulo::setCoordenadasX(double *DOUBLE_COORD_X)
{
   coordX[0] = x[0];
   coordX[1] = x[1];
}

void retangulo::setCoordenadasY(double *DOUBLE_COORD_Y)
{
   coordY[0] = y[0];
   coordY[1] = y[1];
}

// ...

 

 

Isso facilitaria ao nomear variáveis... mas acho que deixa o código confuso, o que não segue ao padrão do KISS... então não façam isso xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.