Ir ao conteúdo

Posts recomendados

Postado

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);

Postado
  Em 15/02/2020 às 13:53, Jonathas David disse:

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

Expandir  

 

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.

Postado
#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
Postado
  Em 15/02/2020 às 16: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.

Expandir  

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
  Em 15/02/2020 às 21:09, vangodp disse:

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

Expandir  

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
  Em 16/02/2020 às 01:39, 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.

 

 

 

Expandir  

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
  Em 16/02/2020 às 15:12, 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;
}

 

Expandir  

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

Postado
  Em 17/02/2020 às 00:26, 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

Expandir  

 

adicionado 3 minutos depois
  Em 16/02/2020 às 22:48, 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).

Expandir  

poxaaa ovo estudar entao ;-; partiu kk

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...