Ir ao conteúdo

Posts recomendados

Postado

Olá, pessoal. Então, eu to tentando implementar todos os métodos das subclasses e usar numa aplicação simples, mas esta apresentando alguns erros que eu não estou conseguindo arrumar. Segue abaixo o arquivo "Shape.h" e o cpp com uma aplicação usando essas classes(pode alterar a aplicação, é só pra demonstrar o uso).

 

#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;


// ==== class Point =============================================================================
class Point
{
   // Atributos 
   protected:
	   float _x;
	   float _y;
   // Metodos
   public:
   // construtor
   Point(float x,float y); //construtor default
   Point(); // construtor sobrecarregado
   //metodos de acesso
   void set_x(float x);
   float get_x();
   void set_y(float y);
   float get_y();
   // outros metodos
   void set_coord(float x,float y);
   float distance(Point *p);
   Point new_Point(float dx,float dy);
   
};
   	
	  Point::Point(float x,float y)
	   {
	   	    _x = x;
	   	    _y = y;
	   }
   
       Point::Point()
	   {
	   	    _x = 0;
	   	    _y = 0;
	   }
   //metodos de acesso
	    void Point::set_x(float x)
		{
		   _x = x;
		}
		
		float Point::get_x()
		{
		   return _x;
		}
		
		void Point::set_y(float y)
		{
		   _y = y;
		}
		
		float Point::get_y()
		{
		   return _y;
		}
	
	void Point::set_coord(float x,float y)
	{
		_x = x;
		_y = y;
	}

	float Point::distance(Point *p)
	{
	  float d;
	  d = sqrt(pow((_x - p->get_x()),2) + pow((_y - p->get_y()),2));
	  return d;
	}
	
	Point Point::new_Point(float dx,float dy)
	{
	    Point novoPonto(_x + dx, _y + dy);
		return novoPonto;
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	
//===== classe Line ===================================================================
class Line:public Point
{
   // atributos 
   private:
   float _d;
   char color[10];
   // metodo construtor
   public:
   Line(float x, float y, char *cor);
   Line();
   
   // Metodos
   void set_d(Point *p[2]);
   float get_d();
    
	
};

Line::Line(float x, float y, char *cor):Point(x,y)
{
       strcpy(color,cor);    
}


//............................


void Line::set_d(Point *p[2])
{
	_d = p[0]->distance(p[1]);	
}
	
float Line::get_d()
{
	return _d;
}

////////////////////////////////////////////////////////////


// ==== classe Circle	 ===================================================================
class Circle:public Point
{
	// atributos
	private:
	float _r;
	char color[10];
	
	public:
	// metodo construtor
	Circle(float x, float y, const char *cor);
	Circle();
	// metodos
	void set_raio(Point *p[2]);
	float get_raio();
	void set_color(char *cor);
	void get_color(char *cor);
	float get_area();
	float get_perimeter();
	
};

Circle::Circle(float x, float y, const char *cor):Point(x,y)
{
	strcpy(color,cor);
}

Circle::Circle():Point()
{
	strcpy(color,"Sem cor");
}

void Circle::set_raio(Point *p[2])
{
	_r = p[0]->distance(p[1]);
}

float Circle::get_raio()
{
	return _r;
}

void Circle::set_color(char *cor)
{
     	strcpy(color,cor);
}

void Circle::get_color(char *cor)
{
     	strcpy(cor,color);
}

float Circle::get_area()
{
	float area = 3.14 * _r * _r;
	return area;
}

float Circle::get_perimeter()
{
	float perimeter = 2 * 3.14 * _r;
	return perimeter;
}


//...................................


// ==== classe Square  ===================================================================
class Square:public Point
{
  // atributos
  float _l;
  float _d;
  char color[10];
  // metodo construtor
  Square(float x,float y, char *cor);
  Square();

  // methods
  void set_diagonal(Point *p[2]);
  float get_diagonal();
  void set_lado(Point p);
  float get_lado();
  void set_color(char *cor);
  void get_color(char *cor);
  float area();
  float perimeter();
  
};
 
 Square::Square(float x,float y, char *cor):Point(x,y)
 {
 	strcpy(color,cor);
 }
 
 Square::Square():Point()
{
	strcpy(color,"Sem cor");
}
 
float Square::get_diagonal()
{
	float diagonal = sqrt((_l*_l)+(_l*_l)); 
	return diagonal;
}


void Square::set_diagonal(Point *p[2])
{

_d = p[0]->distance(p[1]);

}


void Square::set_lado(Point p)
{
	_l = p;
}

float Square::get_lado()
{
	return _l;
}

void Square::set_color(char *cor)
{
     	strcpy(color,cor);
}

void Square::get_color(char *cor)
{
     	strcpy(cor,color);
}

float Square::area()
{
	float area = _l*_l;
	return area;
}

float Square::perimeter()
{
    float perimeter = _l*4;
    return perimeter;
}
 //..............................
 
 
 
// ==== classe Rectangle   ===================================================================
class Rectangle:public Point
{
  // atributos
 float _h;
 float _b;
 char color[10];
  // metodo construtor
  Rectangle(float x, float y, char *cor);
  Rectangle();
  // methods
   void set_altura(Point *p[2]);
   float get_altura();
   void set_base(Point *p[2]);
   float get_base();
   void set_color(char *cor);
   void get_color(char *cor);
   float area();
   float perimeter();
    
};  
   
   Rectangle::Rectangle(float x, float y, char *cor):Point(x,y)
	   {
	   	    color = "Sem cor";
	   }
   
       Rectangle::Rectangle()
	   {
	   	    _h = 0;
	   	    _b = 0;
	   }
   
void Rectangle::set_altura(float x){
        _h = x;
}
   
float Rectangle::get_altura(){
         return _h;
         }
         
void Rectangle::set_base(float y){
        _b = y;
}
   
float Rectangle::get_base(){
   	
        return _b;
}
   
void Rectangle::set_color(char *cor)
{
     	strcpy(color,cor);
}

void Rectangle::get_color(char *cor)
{
     	strcpy(cor,color);
}

float Rectangle::area()
{
	float area = _b * _h;
	return area;
}

float Rectangle::perimeter()
{
	float perimeter = 2*(_b + _h);
	return perimeter;
}


//....................................


// ===== classe Triangle   ===================================================================
class Triangle:public Point
{
	// atributos
	float _a;
	float _b;
	float _c;
	char color[10];
	// metodo construtor
	Triangle(float x, float y, char *cor);
	Triangle();
	// metodo
	void set_a(Point *p[2]);
	float get_a();
	void set_b(Point *p[2]);
	float get_b();
	void set_c(Point *p[2]);
    float get_c();
    void set_color(char *cor);
	void get_color(char *cor);
    void set_lados(Point *p[2]);
    float get_area();
    float get_perimeter();
    
};

Triangle::Triangle(float x, float y, char *cor):Point(x,y)
{
	strcpy(color,cor);
}

Triangle::Triangle()
{
	_a = 0;
	_b = 0;
	_c = 0;
	color = "Sem cor";
}

void Triangle::set_a(float x)
{
	_a = x;
}

float Triangle::get_a()
{
	return _a;
}

float Triangle::get_b()
{
	return _b;
}

void Triangle::set_b(float y)
{
	_b = x;
}


void Triangle::set_c(float z)
{
	_c = z;
}

float Triangle::get_c()
{
	return _c;
}

void Triangle::set_color(char *cor)
{
     	strcpy(color,cor);
}

void Triangle::get_color(char *cor)
{
     	strcpy(cor,color);
}

void Triangle::set_lados(Point *p[2])
{
 	_a = p[0];
	_b = p[1];
    _c = p[3];
}

float Triangle::get_area()
{
	float area = (_a * _b)/2);
	return area;
}

float Triangle::get_perimeter()
{
	float perimeter = _a + _b + _c;
	return perimeter;
}

//.........................................
#include <iostream>
#include "myShapes.h"

using namespace std;

// Programa principal

int main() {
    Point p1(5, 2);
    Point p2(2, 5);
    Point p3;

    cout << p1.get_x() << endl;
    cout << p1.get_y() << endl;

    cout << "Distancia: " << p1.distance(p2) << endl;

    p3 = p1.new_Point(5, 5);

    cout << p3.get_x() << endl;
    cout << p3.get_y() << endl;

    system("pause");

    return 0;
}

 

Postado
#include <iostream>
#include <string.h>
#define MAX_DISC 10
#define MAX_STR 80

using namespace std;

//////////////////////////
class pessoa
{
      private:
              char nome[MAX_STR];
              char endereco[MAX_STR];
              char nasc[10];
              
      public:
             pessoa (const char *nom, const char *end, const char *d_nasc);
             void AtualizarEndereco (const char *end){strcpy(endereco,end);}
             void LerDadosPessoais (char *n, char *end,char *d_nasc);
             double LerSalario (void);             
}; 

pessoa::pessoa (const char *nom, const char *end, const char *d_nasc)
{
                     strcpy(nome,nom);
                     strcpy(endereco,end);
                     strcpy(nasc,d_nasc);
}
void pessoa::LerDadosPessoais (char *n, char *end,char *d_nasc)
{
     strcpy(n,nome);
     strcpy(end,endereco);
     strcpy(d_nasc,nasc);
}

////////////////////////////////////
class professor:public pessoa
{
      private:
              int grau;
              int disciplinas[MAX_DISC];
              int area;
              int n_disc;
      public:
             professor(const char *n, const char *e, const char *dn, int g, int a);
             void IncluirGrau (int g){grau=g;}
             void IncluirDisciplinas (int nd, const int *disc)
             {   n_disc=nd;
             for(int i=0; i<n_disc; i++) disciplinas[i]=disc[i];
             }
             void IncluirArea (int a){area=a;}
             void LerDadosAcademicos (int *g, int *disc, int *a);
      }; 
      
professor::professor (const char *n, const char *e, const char *dn, int g, int a):pessoa(n,e,dn)
{
                     grau=g;
                     area=a;
                     n_disc=0;;
                     for(int i=0; i<MAX_DISC; i++) disciplinas[i]=0;
}
void professor::LerDadosAcademicos (int *g, int *disc, int *a)
{
     *g=grau; *a=area;
     for(int i=0; i<n_disc; i++) disciplinas[i]=disc[i];
}

////////////////////////////////////////////////
class aluno:public pessoa
{
      private:
              int matricula;
              int curso;
              int disciplinas[MAX_DISC];
              int notas[MAX_DISC];
              int n_disc;
      public:
             aluno(const char *n, const char *e, const char *dn, int m, int c);
             void Matricular(int nd, const int *d);
             void IncluirNotas (const int *n){for(int i=0;i<n_disc;i++)notas[i]=n[i];}
             int LerMatricula (void){return matricula;}
             int LerCurso (void){return curso;}
             void LerNotasDisc (int *n, int *d);
      }; 
      
aluno::aluno (const char *n, const char *e, const char *dn, int m, int c):pessoa(n,e,dn)
{
                     matricula=m;
                     curso=c;
                     n_disc=0;;
                     for(int i=0; i<MAX_DISC; i++) disciplinas[i]=0;
}

void aluno::Matricular (int nd, const int *disc)
{
    n_disc=nd;
    for(int i=0; i<n_disc; i++) disciplinas[i]=disc[i];     
   

}
void aluno::LerNotasDisc (int *n, int *d)
{
     int i;
     for (i=0;i<n_disc;i++)
     {
         n[i]=notas[i];
         d[i]=disciplinas[i];
     }
}

////////////////////////////////////////
class funcionario:public pessoa{
      private:
              float salario;
              int depto;
              int cargo;
      public:
             funcionario (const char *n, const char *e, const char *dn, float s, int d, int c); 
             void AlterarSalario(float s){salario=s;}
             void AlterarDepto (int d){depto=d;}
             void AlterarCargo(int c){cargo=c;}
             float LerSalario (void){return salario;}
             int LerDepto (void){return depto;}
             int LerCargo (void){return cargo;}
}; 

funcionario::funcionario (const char *n, const char *e, const char *dn, float s, int d, int c):pessoa(n,e,dn)
{
    salario=s;
    depto=d;
    cargo=c;
}

 

Eu comecei implementando algumas classes, mas fora as que estão ai, sempre ta ocorrendo erro se tento implementar mais. Alguem poderia me ajudar a implementar essas classes?

Postado

@Rafael Filho Macedo Olá. Percebi q postou outro código (!?) 

OBS: Sempre espere aparecer uma resposta a dúvida q você tem para daí postar algo novo. Ou, se tem um outro código com problema, abra um novo tópico!

Quanto ao primeiro projeto é o seguinte: Deu para ajustar aqui. Só q gostaria de dar uma dica.

Você está trabalhando com o C++, e no C++ tem a classe string. Para fazer uso dessa classe só é preciso incluir a biblioteca <string> no projeto.

Por isso não é mais preciso fazer algo assim:

char color[10];

Você já pode usar a classe string e fazer a mesma coisa dessa forma:

string color;

No método getColor ficaria assim:

string Triangle::get_color()
{
    return color;
}

E por aí vai. Vou postar o código. Mas devo adiantar q preciso analisar melhor o código. 

Mas como tenho q sair depois vou postar como está. Aqui tá compilando e aparentemente funcionando corretamente

Segue o código:

#include <iostream>
#include <math.h>
#include <string>
using namespace std;


// ==== class Point =============================================================================
class Point
{
    // Atributos
protected:
    float _x;
    float _y;
    // Metodos
public:
    // construtor
    Point(float x,float y); //construtor default
    Point(); // construtor sobrecarregado
    //metodos de acesso
    void set_x(float x);
    float get_x();
    void set_y(float y);
    float get_y();
    // outros metodos
    void set_coord(float x,float y);
    float distance(Point *p);
    Point new_Point(float dx,float dy);

};

Point::Point(float x,float y)
{
    _x = x;
    _y = y;
}

Point::Point()
{
    _x = 0;
    _y = 0;
}
//metodos de acesso
void Point::set_x(float x)
{
    _x = x;
}

float Point::get_x()
{
    return _x;
}

void Point::set_y(float y)
{
    _y = y;
}

float Point::get_y()
{
    return _y;
}

void Point::set_coord(float x,float y)
{
    _x = x;
    _y = y;
}

float Point::distance(Point *p)
{
    float d;
    d = sqrt(pow((_x - p->get_x()),2) + pow((_y - p->get_y()),2));
    return d;
}

Point Point::new_Point(float dx,float dy)
{
    Point novoPonto(_x + dx, _y + dy);
    return novoPonto;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//===== classe Line ===================================================================
class Line:public Point
{
    // atributos
private:
    float _d;
    string color;
    // metodo construtor
public:
    Line(float x, float y, string cor);
    Line();

    // Metodos
    void set_d(Point *p[2]);
    float get_d();


};

Line::Line(float x, float y, string cor):Point(x,y)
{
    color = cor;
}


//............................


void Line::set_d(Point *p[2])
{
    _d = p[0]->distance(p[1]);
}

float Line::get_d()
{
    return _d;
}

////////////////////////////////////////////////////////////


// ==== classe Circle	 ===================================================================
class Circle:public Point
{
    // atributos
private:
    float _r;
    string  color;

public:
    // metodo construtor
    Circle(float x, float y, string cor);
    Circle();
    // metodos
    void set_raio(float _r);
    float get_raio();
    void set_color(string cor);
    string get_color();
    float get_area();
    float get_perimeter();

};

Circle::Circle(float x, float y, string cor) : Point( x, y)
{
    color = cor;
}

Circle::Circle() : Point()
{
    color = "Sem cor";
}

void Circle::set_raio(float _r)
{
    this->_r = _r;
}

float Circle::get_raio()
{
    return _r;
}

void Circle::set_color(string cor)
{
    color = cor;
}

string Circle::get_color()
{
    return color;
}

float Circle::get_area()
{
    float area = 3.14 * _r * _r;
    return area;
}

float Circle::get_perimeter()
{
    float perimeter = 2 * 3.14 * _r;
    return perimeter;
}


//...................................


// ==== classe Square  ===================================================================
class Square : public Point
{
    // atributos
private:
    float _l;
    float _d;
    string color;
public:
    // metodo construtor
    Square(float x,float y, string cor);
    Square();

    // methods
    void set_diagonal(Point *p[2]);
    float get_diagonal();
    void set_lado(Point p);
    float get_lado();
    void set_color(string cor);
    string get_color();
    float area();
    float perimeter();

};

Square::Square(float x,float y, string cor):Point(x,y)
{
    color = cor;
}

Square::Square():Point()
{
    color = "Sem cor";
}

float Square::get_diagonal()
{
    float diagonal = sqrt((_l*_l)+(_l*_l));
    return diagonal;
}


void Square::set_diagonal(Point *p[2])
{

    _d = p[0]->distance(p[1]);

}


void Square::set_lado(Point p)
{
    //_l = p;
}

float Square::get_lado()
{
    return _l;
}

void Square::set_color(string cor)
{
    color = cor;
}

string Square::get_color()
{
    return color;
}

float Square::area()
{
    float area = _l*_l;
    return area;
}

float Square::perimeter()
{
    float perimeter = _l * 4;
    return perimeter;
}
//..............................



// ==== classe Rectangle   ===================================================================
class Rectangle:public Point
{
    // atributos
private:
    float _h;
    float _b;
    string color;
    // metodo construtor
public:
    Rectangle(float x, float y, string cor);
    Rectangle();
    // methods
    void set_altura(float x);
    float get_altura();
    void set_base(float y);
    float get_base();
    void set_color(string cor);
    string get_color();
    float area();
    float perimeter();

};

Rectangle::Rectangle(float x, float y, string cor):Point(x,y)
{
    this->color = cor;
    this->_h = x;
    this->_b = y;
}

Rectangle::Rectangle()
{
    //_h = 0;
    //_b = 0;
}

void Rectangle::set_altura(float x) {
    _h = x;
}

float Rectangle::get_altura() {
    return _h;
}

void Rectangle::set_base(float y) {
    _b = y;
}

float Rectangle::get_base() {

    return _b;
}

void Rectangle::set_color(string cor)
{
    color = cor;
}

string Rectangle::get_color()
{
    return this->color;
}

float Rectangle::area()
{
    float area = this->_b * this->_h;
    return area;
}

float Rectangle::perimeter()
{
    float perimeter = 2*(_b + _h);
    return perimeter;
}


//....................................


// ===== classe Triangle   ===================================================================
class Triangle:public Point
{
    // atributos
private:
    float _a;
    float _b;
    float _c;
    string color;
    // metodo construtor
public:
    Triangle(float x, float y, string cor);
    Triangle();
    // metodo
    void set_a(float a);
    float get_a();
    void set_b(float b);
    float get_b();
    void set_c(float c);
    float get_c();
    void set_color(string cor);
    string get_color();
    void set_lados(Point *p);
    float get_area();
    float get_perimeter();

};

Triangle::Triangle(float x, float y, string cor):Point(x,y)
{
    color = cor;
}

Triangle::Triangle()
{
    _a = 0;
    _b = 0;
    _c = 0;
    color = "Sem cor";
}

void Triangle::set_a(float a)
{
    _a = a;
}

float Triangle::get_a()
{
    return _a;
}

float Triangle::get_b()
{
    return _b;
}

void Triangle::set_b(float b)
{
    _b = b;
}


void Triangle::set_c(float c)
{
    _c = c;
}

float Triangle::get_c()
{
    return _c;
}

void Triangle::set_color(string cor)
{
    color = cor;
}

string Triangle::get_color()
{
    return color;
}

void Triangle::set_lados(Point *p)
{
    //_a = p[0].get_x();
    //_b = p[1].get_x();
    //_c = p[3].get_x();
}

float Triangle::get_area()
{
    float area = ((_a * _b) / 2);
    return area;
}

float Triangle::get_perimeter()
{
    float perimeter = _a + _b + _c;
    return perimeter;
}

//.........................................

//.........................................

int main() {

    Point *p1 = new Point(5, 2);
    Point *p2 = new Point(2, 5);
    Point p3;

    Rectangle *r = new Rectangle(4, 8, "Azul");

    Circle *c = new Circle();
    c->set_color("Verde");
    c->set_raio(5);

    cout << "Circulo\n" << endl;
    cout << "cor: " << c->get_color() << endl;
    cout << "Area: " << c->get_area() << endl;
    cout << "Perimetro: " << c->get_perimeter() << endl;

    cout << endl;

    cout << "Retangulo\n" << endl;
    cout << "Cor: " << r->get_color() << endl;
    cout << "Area: " << r->area() << endl;
    cout << "Perimetro: " << r->perimeter() << endl;

    cout << endl;

    cout << p1->get_x() << endl;
    cout << p1->get_y() << endl;

    cout << endl;

    cout << "Distancia: " << p1->distance(p2) << endl;

    p3 = p1->new_Point(5, 5);

    cout << endl;

    cout << p3.get_x() << endl;
    cout << p3.get_y() << endl;

    cout << endl;

    delete p1;

    delete p2;

    delete r;

    delete c;

    system("pause");

    return 0;
}

Dá uma verificada para ver se está funcionando corretamente. Qualquer coisa avisa, ok?

Postado

@giu_d

 

Cara, continua o erro em funções como essa:

 

void Triangle::set_lados(Point *p) {

//_a = p[0].get_x();

//_b = p[1].get_x();

//_c = p[3].get_x();

}

 

Quase todas que tem o Point *p ou Point p[] no parâmetro está dando erro. É isso que não estou entendendo e sabendo arrumar... 

Postado

@Rafael Filho Macedo É. Nessa parte q você postou aí até deixei comentado pois está dando erro mesmo.

Sinceramente não tô entendendo o q você quer nessa parte do código.

Perceba o seguinte nessa parte do código abaixo:

void Line::set_d(Point *p[2]) // você está fazendo assim
{
    _d = p[0]->distance(p[1]);	
}
	
float Line::get_d()
{
    return _d;
}

Só q no método set_d não tem como dar certo isso. Perceba q _d é um atributo da classe Line e é do tipo float. Logo, o maneira correto é usar como parâmetro um tipo de dado float.

Logo, o código correto, nesse caso, seria isso:

void Line::set_d(float a)
{
    this->_d = a;
}

Eu falei q não analisei devidamente o código quando postei. Cheguei agora há pouco em casa

Nesse método, o q você deve fazer é passar um valor do tipo float como parâmetro quando chamar o método para q _d passe a valer esse valor q foi passado. O nome já diz o q deve ser feito: setar o valor de _d. Tal como no método get_d, é capturar o valor de _d. Deu para entender a lógica? Se _d fosse do tipo Point aí seria outra história. Mas é do tipo float amigo. E esse tipo de coisa você está fazendo em todos os métodos getters e setters

Outro ponto: esse parâmetro:

Point *p[2] // aqui se trata de uma matriz bidimensional

Procure entender a respeito dos métodos getters e setters e aí avançamos, ok?

Até no seu código tem métodos get_Tal q você coloca parâmetros (!?)

OBS: Tem um ponto importante para frisar. Não adianta definir os atributos de uma classe como sendo privados e aí criar métodos getters e setters p tudo. Não faz sentido isso

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!