Ir para conteúdo

Arquivado

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

Benefactor

Retornar float e string

Recommended Posts

Ola pessoal, estou iniciando em POO e gostaria de um auxilio de vocês:

 

Header:

#pragma once
#include <string>

using namespace std;

class Aluno
{
private:
	string nome;
	float notas[4];
	float pesos[4];

public:
	Aluno(void);
	~Aluno(void);

	void setNome(string);
	void setNotas(float, float, float, float);
	void setPesos(float, float, float, float);
	float getDados();
};

Aluno.cpp

#include "Aluno.h"


Aluno::Aluno(void)
{
}


Aluno::~Aluno(void)
{
}

	void Aluno::setNome(string no)
	{
		nome = no;
	}
	void Aluno::setNotas(float n1, float n2, float n3, float n4)
	{
		notas[1] = n1;
		notas[2] = n2;
		notas[3] = n3;
		notas[4] = n4;

	}
	void Aluno::setPesos(float p1, float p2, float p3, float p4)
	{
		pesos[1] = p1;
		pesos[2] = p2;
		pesos[3] = p3;
		pesos[4] = p4;
	}
	float Aluno::getDados()
	{
		return notas[1];
	}

Principal.cpp

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

using namespace std;

void main(){

	Aluno *a1;
	a1 = new Aluno();

	a1->setNome("Meu nome");
	a1->setNotas(4,3,2,1);
	cout << a1->getDados() << endl;

	system("pause");

}

É um código bem simples e preciso de duas ajudas:

 

* O método getDados() deve retornar o nome e as somas das notas

* Achei horrivel essa maneira que fiz de notas[1] = n1, vocês tem alguma solução pra melhorar isso ?

 

O script da maneira que esta mostra na tela somente a primeira nota (fiz isso pra teste) e o retorno do getDados esta como float também para testes. Poderiam me ajudar ? Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar 2 vetores "Notas[4]" e "N[4]" e utilizar um for pra percorrer esses 4 elementos de vetor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por responder mais acho que com poteiros teria uma outra maneira também, e quanto ao método que deve retornar uma string e um float, saberia de algo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro receber as notas como um vetor. E utilizar laço de repetição para atribuir os valores para o vetor interno da classe.

 

A única maneira que conheço de um método possuir dois ou mais retornos é através de ponteiros recebidos por parâmetro.

EX.:

float Aluno::getDados(char* retornoNome, float* retornoNotas)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só complementando a resposta do Becker: usando ponteiros como argumentos vc não está propriamente retornando algo, mas realizando a alteração num endereço de memória originário de uma outra parte do código. Uma forma de vc retornar um "pacote" de dados numa função é usar uma struct, mas realmente, retornar duas coisas separadas usando return não tem como, a princípio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por terem ajudado, eu coloquei pra retornar uma string e deu certinho, ficou assim:

    string Aluno::getDados()
    {
        ostringstream aux;
        aux << "Nome: " << nome << endl << "Media: " << media() << endl;
        return aux.str();
    }

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.