Ir ao conteúdo
  • Cadastre-se

Sobrecarga de String


Posts recomendados

Minha professora passou esse exercício mas não entendi direito o que é pra fazer. Segue exercicio:

 

•Defina uma classe chamada String.
•A classe deve permitir comparações (<, >, ==) e concatenações (+ , +=). *
•Criar um programa principal para testar a classe.
*Sobrecarga

 

O que fiz até agora:

 

CLASSE

class caracter{
    
    private:
        char palavra[20];

    public:
        caracter();
        caracter(char p[]);
        caracter operator <(caracter p);
        caracter operator >(caracter p);
        caracter operator == (caracter p);
        caracter operator + (caracter p);
        caracter operator += (caracter p);

};

METODOS

#include <iostream>
#include <string.h>
#include "caracter.h"

using namespace std;

caracter::caracter(){

    palavra[0] = '/0';

}
caracter::caracter(char p[]){

    strcpy(palavra,p);

}
caracter caracter::operator <(caracter p){



}
caracter caracter::operator >(caracter p){



}
caracter caracter::operator == (caracter p){



}
caracter caracter::operator + (caracter p){



}
caracter caracter::operator += (caracter p){



}

O que não entendi é as comparações e concatenações que tem que fazer. Não achei exemplos na internet.

Link para o comentário
Compartilhar em outros sites

Em português isso se chama sobrecarga de operadores, e em inglês se chama operator overloading.

com buscar "string manipulation using operator overloading in c++" saiu coisas como esta:
https://vinodthebest.wordpress.com/2012/05/17/c-string-operator-overloading/


Com buscar: string concatenation and comparison using operator overloading in c++

Saiu isso:
http://www.cplusplus.com/forum/beginner/76314/

 

siga buscando que tem muita info por internet.

Link para o comentário
Compartilhar em outros sites

@vangodpValeu amigo isso vai ajudar muito, não tava entendendo direito o que era pra fazer.

Aproveitando o post, agora estou com problema nesse código, segue:

 

CLASS

class cadastro
{
    private:
        char nome[30];
        char telefone[20];

    public:
        cadastro();
        cadastro(char n[], char t[]);
        void getdata();
        void putdata();

};

class imovel
{
    private:
        char endereco[30];
        char bairro[20];
        float area;
        int quartos;

    public:
        imovel();
        imovel(char e[], char b[], float a, int q);
        void getdata();
        void putdata();

};

class tipo
{
    private:
        char tip[20];

    public:
        tipo();
        tipo(char ti[]);
        void getdata();
        void putdata();

};

class venda: private cadastro, imovel, tipo
{
    private:
        float valor;

    public:
        venda();
        venda(char n[], char t[], char e[], char b[], float a, int q, char ti[], int v);
        void getdata();
        void putdata();

};

class aluguel:private cadastro, imovel, tipo
{
    private:
        float aluguels;
        int prazo;
        cadastro proprietario;

    public:
        aluguel();
        aluguel(char n[], char t[], char e[], char b[], float a, int q, char ti[], float al, int pr);
        void getdata();
        void putdata();

};

METODOS

#include <iostream>
#include <string.h>
#include "cadastro.h"

using namespace std;

cadastro::cadastro(){

    strcpy(nome,"");
    strcpy(telefone,"");;

}

cadastro::cadastro(char n[], char t[]){

    strcpy(nome,n);
    strcpy(telefone,t);

}

void cadastro::getdata(){

    cout << "\nNome: ";
    cin >> nome;

    cout << "\nTelefone: ";
    cin >> telefone;

}

void cadastro::putdata(){

    cout << "\nNome: " << nome;
    cout << "\nTelefone: " << telefone;

}

imovel::imovel(){

    strcpy(endereco,"");
    strcpy(bairro,"");
    area = 0;
    quartos = 0;

}

imovel::imovel(char e[], char b[], float a, int q){

    strcpy(endereco,e);
    strcpy(bairro,b);
    area = a;
    quartos = q;

}

void imovel::getdata(){

    cout << "\nEndereco: ";
    cin >> endereco;

    cout << "\nBairro: ";
    cin >> bairro;

    cout << "\nArea Util: ";
    cin >> area;

    cout << "\nQuartos: ";
    cin >> quartos;

}

void imovel::putdata(){

    cout << "\nEndereco: " << endereco;
    cout << "\nBairro: " << bairro;
    cout << "\nArea Util: " << area;
    cout << "\nQuartos: " << quartos;

}

tipo::tipo(){

    strcpy(tip,"");

}

tipo::tipo(char ti[]){

    strcpy(tip,ti);

}


void tipo::getdata(){

    cout << "\nTipo: ";
    cin >> tip;

}

void tipo::putdata(){

    cout << "\nTipo: " << tip;

}

venda::venda():cadastro(),imovel(),tipo(){

    valor = 0;

}

venda::venda(char n[], char t[], char e[], char b[], float a, int q, char ti[], int v){

    cadastro(n,t);
    imovel(e,b,a,q);
    tipo(ti);	// -> Aqui da um erro de sombreamento
    valor = v;

}

void venda::getdata(){
    cout << "\nProprietario: ";
    cadastro::getdata();
    cout << "\nImovel: ";
    imovel::getdata();
    tipo::getdata();
    cout << "\nValor R$: ";
    cin >> valor;

}

void venda::putdata(){

    cout << "\nProprietario:";
    cadastro::putdata();
    cout << "\n\nImovel:";
    imovel::putdata();
    tipo::putdata();
    cout << "\tValor: " << valor;

}

aluguel::aluguel():cadastro(),imovel(),tipo(){

    aluguels = 0;
    prazo = 0;

}

aluguel::aluguel(char n[], char t[], char e[], char b[], float a, int q, char ti[], float al, int pr){

    cadastro(n,t);
    imovel(e,b,a,q);
    tipo(ti);	// -> Aqui da um erro de sombreamento
    aluguels = al;
    prazo = pr;

}

void aluguel::getdata(){

    cout << "\nProprietario: ";
    proprietario.getdata();
    cout << "\nInquilino: ";
    cadastro::getdata();
    cout << "\nImovel: ";
    imovel::getdata();
    tipo::getdata();
    cout << "\nAluguel: ";
    cin >> aluguels;
    cout << "\nPrazo de Contrato: ";
    cin >> prazo;

}

void aluguel::putdata(){

    cout << "\nProprietario: ";
    proprietario.putdata();
    cout << "\n\nInquilino: ";
    cadastro::putdata();
    cout << "\n\nImovel: ";
    imovel::putdata();
    tipo::putdata();
    cout << "\n\nAluguel: " << aluguels;
    cout << "\tPrazo de Contrato: " << prazo;

}

Aonde marquei no código da um erro que eu não consigo reverter aparece o seguinte aviso "declaration of 'tipo tip' shadows a parameter". Mas procuro no codigo e não acho a sobreposição.

Link para o comentário
Compartilhar em outros sites

Ok... agora achei um problema. A herança você a faz como private. Sabe o que isso implica? Bom... te conto mesmo assim. Quando você faz class venda: private cadastro, imovel, tipo {... o private quer dizer que você herda porém passando tudo o que era public como private, ou seja se antes eram métodos públicos agora dentro de venda são privados, você precisaria chamar esses métodos ou construtores desde a parte publica da classe venda.

Link para o comentário
Compartilhar em outros sites

Realmente eu errei ali, depois que troquei para public ele funcionou, porém estou com mais um probleminha, deixa eu explicar o que é, nessa parte do codigo:

class aluguel:public cadastro, imovel, tipo
{
    private:
        float aluguels;
        int prazo;
        cadastro proprietario;

    public:
        aluguel();
        aluguel(char n[], char t[], char e[], char b[], float a, int q, char ti[], float al, int pr, cadastro prop);
        void getdata();
        void putdata();

};

eu preciso chamar as variáveis da classe cadastro, então faço "cadastro proprietário", quando faço um getdata ou putdata funciona bem, mas quando tempo iniciar uma variável com argumentos dai as coisa ficam confusas, segue o metodo:

aluguel::aluguel(char n[], char t[], char e[], char b[], float a, int q, char ti[], float al, int pr, cadastro prop):cadastro(n,t),imovel(e,b,a,q),tipo(ti){

    aluguels = al;
    prazo = pr;

}

Eu não sei como fazer isso para iniciar com argumento.

Link para o comentário
Compartilhar em outros sites

venda::venda(char n[], char t[], char e[], char b[], float a, int q, char ti[], int v)
:cadastro(n,t), imovel(e,b,a,q), tipo(ti)
{
    valor = v;

}

 

aluguel::aluguel(char n[], char t[], char e[], char b[], float a, int q, char ti[], float al, int pr)
:cadastro(n,t), imovel(e,b,a,q), tipo(ti)
{
    aluguels = al;
    prazo = pr;

}


Aqui deixo um projeto configurado rodando aparentemente de forma correta.
Mystring.rar

 

O segredo é fazer o que você está fazendo já.... usar listas de inicialização para chamar os construtores das classes herdadas, e procure fazer na ordem em que foram herdadas.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!