Ir ao conteúdo
  • Cadastre-se

C++ como passar uma classe de objetos para uma funcao


Jonathas David

Posts recomendados

OLÁ PESSOAL, saudações... Estou querendo saber como faço para passar um classe inteira de objetos para uma função em c++

tipo assim:

quando voce cria uma classe de objetos voce começa assim

class carro
{
public:
    string cor;

    int rodas;

    string carcaçaça;
};

dentro da main:---->

carro a;

a.cor=vermelho...

a.rodas=6...

 

agora quando eu vou passar para uma funcao eu tenho que colocar um por um tipo assim :

funcaoteste(a.cor,a.rodas)

 

o que eu quero saber e se é possivel passar todos os objetos com um unica classe

será possivel ?

tipo:

funcaoteste(a);

Link para o comentário
Compartilhar em outros sites

Não sou mestre em C++, mas eu gosto muito de programar com objetos.

 

A meu ver seria basicamente uma passagem por referencia.

Exemplo

#include <iostream>
#include <string>

/* Tipos */
class TOCarro
{
  private:
    std::string cor;
    int rodas;
    std::string chassi;
  public:
    void DefineCor(std::string c);
    void DefineNRodas(int r);
    void DefineChassi(std::string c);
    std::string PegaCor(void){
      return(cor);
    }
    int PegaNRodas(void){
      return(rodas);
    }
    std::string PegaChassi(void){
      return(chassi);
    }
    TOCarro();
};

/* Declarações */
void TOCarro::DefineCor(std::string c)
{
  cor=c;
}

void TOCarro::DefineNRodas(int r)
{
  rodas=r;
}

void TOCarro::DefineChassi(std::string c)
{
  chassi=c;
}

TOCarro::TOCarro(void)
{
  cor="Sem";
  rodas=0;
  chassi="Sem";
}

void Opala(TOCarro &carro)
{
  carro.DefineCor("Azul");
  carro.DefineNRodas(4);
  carro.DefineChassi("OAITO2J4892J");
}

int main() {
  TOCarro carro;
  Opala(carro);
  std::cout <<"Cor:"<<carro.PegaCor()<<"\nNumero de rodas:"<<carro.PegaNRodas()<<"\nChassi do carro:"<<carro.PegaChassi();
}

Agora fica a critério dos especialistas em C++ para dizer se está certo.

Link para o comentário
Compartilhar em outros sites

11 horas atrás, Jonathas David disse:

passar um classe inteira de objetos para uma função em c++

 

A resposta curta é sim.
 

Note que em C++ objetos são chamados classes então uma classe inteira de objetos seria uma classe. Só isso. E que poderia conter outras classes, que poderiam conter outras classes e tal.

 

E você não passa uma classe inteira de objetos, passa uma instância da classe --- ou do objeto, se preferir chamar assim.

 

Hoje não posso escrever um exemplo, mas entenda que ao usar algo como

void funcao_carro( carro um_carro ){ return; };

vai estar copiando a variável para outro local e então construtores serão invocados, e você precisa entender os custos e os efeitos colaterais disso.

 

Apenas usando ponteiros vai deixar de usar esses mecanismos --- construtores ---  e nem sempre a lógica permite usar ponteiros, então é preciso se acostumar com esses casos.

Link para o comentário
Compartilhar em outros sites

#include <iostream>

using std::string;
using std::cout;

class Pessoa {
public:
    string nome;
    int idade;

    void imprimir() {
        cout << nome << " tem " << idade << " anos de idade. \n";
    }
};

void funcao(Pessoa *pessoa) {
    pessoa->imprimir();
}

int main() {
    Pessoa pessoa;
    pessoa.nome = "Ele";
    pessoa.idade = 40;

    funcao(&pessoa);
    return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Em 15/02/2020 às 13:15, KXSY disse:

Não sou mestre em C++, mas eu gosto muito de programar com objetos.

 

A meu ver seria basicamente uma passagem por referencia.

Exemplo


#include <iostream>
#include <string>

/* Tipos */
class TOCarro
{
  private:
    std::string cor;
    int rodas;
    std::string chassi;
  public:
    void DefineCor(std::string c);
    void DefineNRodas(int r);
    void DefineChassi(std::string c);
    std::string PegaCor(void){
      return(cor);
    }
    int PegaNRodas(void){
      return(rodas);
    }
    std::string PegaChassi(void){
      return(chassi);
    }
    TOCarro();
};

/* Declarações */
void TOCarro::DefineCor(std::string c)
{
  cor=c;
}

void TOCarro::DefineNRodas(int r)
{
  rodas=r;
}

void TOCarro::DefineChassi(std::string c)
{
  chassi=c;
}

TOCarro::TOCarro(void)
{
  cor="Sem";
  rodas=0;
  chassi="Sem";
}

void Opala(TOCarro &carro)
{
  carro.DefineCor("Azul");
  carro.DefineNRodas(4);
  carro.DefineChassi("OAITO2J4892J");
}

int main() {
  TOCarro carro;
  Opala(carro);
  std::cout <<"Cor:"<<carro.PegaCor()<<"\nNumero de rodas:"<<carro.PegaNRodas()<<"\nChassi do carro:"<<carro.PegaChassi();
}

Agora fica a critério dos especialistas em C++ para dizer se está certo.

Olha o mestre do C ai kkkk foi por sua causa que estou estudando Orientação a objeto por isso estou com essa duvida... e provavelmente voce ja deve saber o porque rsrsrsrrs muito obrigado S2

adicionado 1 minuto depois
19 horas atrás, vangodp disse:

existem 3 formas de passar um objeto... copia, ponteiro e referência.

SAQUEIZI gosto de respostas curtas e objetivas, mas se tivesse um exemplo neste comentaria ela seria perfeita kkkkk mesmo assim muito obrigado, eu terei que voltar a mexer com ponteiros ? meee a ultima vez me deu uma dorzinha de cabeça para tentar compreender rssrrsrs

 

adicionado 4 minutos depois
15 horas atrás, arfneto disse:

void funcao_carro( carro um_carro ){ return; };

vai estar copiando a variável para outro local e então construtores serão invocados, e você precisa entender os custos e os efeitos colaterais disso.

 

 

 

MUITO OBRIGADO  eu realmente precisava saber se ainda era possivel ou se realmente estava falando abobrinhas kkkk mas esse comentario me adjudou em diversas formas, até diferenciar de objetos para classe rsrsrsr fico contente em ver me ajudando S2

 

 

adicionado 5 minutos depois

meu deus eu respondi tudo errado

e estou com preguiça em desfazer e fazer novamente os comentarios ;(

espero que cada um de vocês encontrem sua resposta ao meu comentario kkkkkk foi mal ae pessoal

adicionado 5 minutos depois
1 hora atrás, AdrianoSiqueira disse:

#include <iostream>

using std::string;
using std::cout;

class Pessoa {
public:
    string nome;
    int idade;

    void imprimir() {
        cout << nome << " tem " << idade << " anos de idade. \n";
    }
};

void funcao(Pessoa *pessoa) {
    pessoa->imprimir();
}

int main() {
    Pessoa pessoa;
    pessoa.nome = "Ele";
    pessoa.idade = 40;

    funcao(&pessoa);
    return 0;
}

 

essa foi pra finalizar com chave de ouro kkkk muito obrigado

adicionado 6 minutos depois

aaaaahh agora que percebi que o site junta seu proprio comentario como se fosse um unico, nao é que fiz errado e sim apenas estetica kkkk

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Jonathas David disse:

Olha o mestre do C ai kkkk foi por sua causa que estou estudando Orientação a objeto por isso estou com essa duvida... e provavelmente voce ja deve saber o porque rsrsrsrrs muito obrigado S2

É quem diria que eu influenciei à alguém aprender alguma coisa.

5 horas atrás, Jonathas David disse:

eu terei que voltar a mexer com ponteiros ? meee a ultima vez me deu uma dorzinha de cabeça para tentar compreender rssrrsrs

sinto muito, mas esse é um requisito obrigatório para programar bem em C++ (C, D ou pascal).

Porque eventualmente você vai precisar de mais memoria no seu programa é a única maneira é pedir mais para o computador (Com o uso de ponteiros).

Link para o comentário
Compartilhar em outros sites

7 horas atrás, Jonathas David disse:

SAQUEIZI gosto de respostas curtas e objetivas, mas se tivesse um exemplo neste comentaria ela seria perfeita kkkkk mesmo assim muito obrigado, eu terei que voltar a mexer com ponteiros ? meee a ultima vez me deu uma dorzinha de cabeça para tentar compreender rssrrsrs

Tem gente que acha difícil passar objetos para funções mas na realidade é como passar valores de uma variável a outra. Se em simples variáveis fazemos algo tipo:
 

#include <iostream>
using namespace std;

class Carro {
public:
    int    seuNumeroRodas;
    string suaCor;
    string seuTipoChasis;
};

int main () {
    Carro chevette;
    chevette.suaCor = "vermelho";
    chevette.seuNumeroRodas = 6;
    
    //Formas de passar variaveis
    Carro carroCopia = chevette;        //Copia... O chevette se copia ao carroCopia
    Carro &carroReferencia = chevette; //Referência... Tudo o que acontecer com carroReferencia acontecerá com chevette também
    Carro *carroPonteiro = &chevette; //Ponteiro... O carroPonteiro aponta para chevette e o permite manipular indiretamente

    cin.ignore();
    return 0;
}

Se tudo isso queremos usar com funções é a mesma coisa... se faria desta forma:
 

#include <iostream>
using namespace std;

class Carro {
public:
    int    seuNumeroRodas;
    string suaCor;
    string seuTipoChasis;
};


void copia( Carro carroCopia  ){}
void refer( Carro &carroReferencia){}
void ptr  ( Carro *carroPonteiro  ){}

int main () {
    Carro chevette;
    chevette.suaCor = "vermelho";
    chevette.seuNumeroRodas = 6;
    
    
    copia(chevette);
    refer(chevette);
    ptr  (&chevette);

    cin.ignore();
    return 0;
}

Praticamente é a mesma coisa que tratar com variáveis.

adicionado 1 minuto depois

Agora n vai me dizer que n sabe usar esses objetos dentro das funções né?! >_< É a mesma coisa que da forma anterior, se n souber isso volte a estudar variáveis shueshueseh.

Link para o comentário
Compartilhar em outros sites

49 minutos atrás, vangodp disse:

 


#include <iostream>
using namespace std;

class Carro {
public:
    int    seuNumeroRodas;
    string suaCor;
    string seuTipoChasis;
};


void copia( Carro carroCopia  ){}
void refer( Carro &carroReferencia){}
void ptr  ( Carro *carroPonteiro  ){}

int main () {
    Carro chevette;
    chevette.suaCor = "vermelho";
    chevette.seuNumeroRodas = 6;
    
    
    copia(chevette);
    refer(chevette);
    ptr  (&chevette);

    cin.ignore();
    return 0;
}

PERFEIÇÃO KKK agora sim muito obrigado, minha duvida era mesmo como passar a classe dentro da funcao, trabalhar com ela deve ser mais fácil kkk... eu acho

 

adicionado 3 minutos depois
2 horas atrás, KXSY disse:

sinto muito, mas esse é um requisito obrigatório para programar bem em C++ (C,

Porque eventualmente você vai precisar de mais memoria no seu programa é a única maneira é pedir mais para o computador (Com o uso de ponteiros).

poxaaa ovo estudar entao ;-; partiu kk

Link para o comentário
Compartilhar em outros sites

@Jonathas David É por isso que quando alguém me pergunta qual dos dois C ou C++ é melhor aprender a programa primeiro, eu indico começar com C. porque C tem toda a base procedural do C++ fora que você teria que só aprender a utilizar objetos (é claro que teria que saber algumas diferenças de sintaxe do C para o C++ e sobrecarga), mas a parte dos objetos é para ser a mais fácil de aprender.

Link para o comentário
Compartilhar em outros sites

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