Ir ao conteúdo
  • Cadastre-se
Joanderson Pereira

C++ C++ Adicionando parâmetros e funções-membros à uma classe

Recommended Posts

Aqui temos a classe GradeBook.

1- Ela possui a string courseName e as funções-membros setCourseName, getCourseName e displayMessage (que permitem, respectivamente, configurar o nome do curso, obter o nome do curso e exibir uma mensagem de boas-vindas).

2- O objetivo é criar a string courseTutor e as funções-membros setCourseTutor, getCourseTutor (que permitem configurar o nome do instrutor e obter o nome do instrutor). E isso dentro da mesma classe GradeBook.

Com certeza tem muitos erros no código em relação a declaração de parâmetros e algumas outras coisas, sinceramente já não tenho mais cabeça para isso.

O código da maneira que está agora apresenta basicamente os seguintes erros:

 

‘getCourseTutor’ was not declared in this scope                                                    */ isso para quase

class ‘GradeBook’ does not have any field named ‘courseTutor’                                  todas as

‘std::string GradeBook::courseTutor’ conflicts with a previous declaration                      funções-membros \*

 

O código estava funcionando apenas com as funções 1.

Tentei adicionar as funções 2 seguindo o mesmo padrão e não deu muito certo.

E aí está a criança:

 

 

 

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

 

 

 

// Figura 3.16: GradeBook.cpp
 // Implementações das definições de função-membro de GradeBook.
 // A função setCourseName realiza a validação.
 #include <iostream>
 using std::cout;
 using std::endl;

 #include "GradeBook.hpp" // inclui a definição de classe GradeBook

 // construtor inicializa courseName com String fornecido como argumento
 GradeBook::GradeBook( string name, string tutor )
    : courseName( name ), courseTutor( tutor )
 {
 setCourseName( name ); // valida e armazena courseName
 setCourseTutor( tutor );
 } // fim do construtor GradeBook

 // função que configura o nome do curso;
 // assegura que o nome do curso tenha no máximo 25 caracteres
 void GradeBook::setCourseName( string name )
 {
 if ( name.length() <= 25 ) // se o nome tiver 25 ou menos caracteres
 courseName = name; // armazena o nome do curso no objeto

 if ( name.length() > 25 ) // se o nome tiver mais de 25 caracteres
 {
 // configura courseName como os primeiros 25 caracteres do parâmetro name
 courseName = name.substr( 0, 25 ); // inicia em 0, comprimento de 25

 cout << "Name \'" << name << "\" exceeds maximum length (25).\n"
 << "Limiting courseName to first 25 characters.\n" << endl;
 } // fim do if
 } // fim da função setCourseName
 
 // função para obter o nome do curso
 string GradeBook::getCourseName()
 {
 return courseName; // retorna courseName do objeto
 } // fim da função getCourseName


 // função que configura o nome do instrutor;
 
 // assegura que o nome do curso tenha no máximo 25 caracteres
 void GradeBook::setCourseTutor( string tutor )
 {
 if ( tutor.length() <= 25 ) // se o nome tiver 25 ou menos caracteres
 courseName = name; // armazena o nome do curso no objeto

 if ( tutor.length() > 25 ) // se o nome tiver mais de 25 caracteres
 {
 // configura courseTutor como os primeiros 25 caracteres do parâmetro name
 courseTutor = tutor.substr( 0, 25 ); // inicia em 0, comprimento de 25

 cout << "Name \'" << tutor << "\" exceeds maximum length (25).\n"
 << "Limiting courseName to first 25 characters.\n" << endl;
 } // fim do if
 } // fim da função setCourseTutor
 
  // função para obter o nome do instrutor
 string GradeBook::getCourseTutor()
 {
 return courseTutor; // retorna courseTutor do objeto
 } // fim da função getCourseTutor

// exibe uma mensagem de boas-vindas para o usuário GradeBook
void GradeBook::displayMessage()
 {
    // chama getCourseName para obter o courseName
    cout << "Welcome to the grade book for\n" << getCourseName()
    << "!" << endl;
    // exibe uma mensagem de boas-vindas para o usuário GradeBook
    
 
 // chama getCourseTutor para obter o courseTutor
 cout << "This course is presented by: "<< getCourseTutor()
 << "!" << endl;
 
 }; // fim da função displayMessage

 

 

 

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

 

 

 

// Figura 3.15: GradeBook.hpp
 // Definição de classe GradeBook apresenta a interface public da
 // classe. Definições de função-membro aparecem em GradeBook.cpp.
 #include <string> // o programa utiliza classe de string padrão do C++
 using std::string;

 // definição da classe GradeBook
 class GradeBook
 {
  public:
 GradeBook( string name, string tutor ); // construtor que inicializa um objeto GradeBook
  : courseName( name ), courseTutor( tutor )
 void setCourseName( courseName ); // função que configura o nome do curso
 string getCourseName(); // função que obtém o nome do curso
 void setCourseTutor ( courseTutor );
 string getCouseTutor ();
 void displayMessage(); // função que exibe uma mensagem de boas-vindas
 private:
 string courseName; // nome do curso para esse GradeBook
 string courseTutor;
 }; // fim da classe GradeBook

 

 

 

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

 

 

 

// Figura 3.17: main.cpp
 // Cria e manipula um objeto GradeBook; ilustra a validação.
 #include <iostream>
 using std::cout;
 using std::endl;

 #include "GradeBook.hpp" // inclui a definição de classe GradeBook

 // a função main inicia a execução do programa
 int main()
 {
 // cria dois objetos GradeBook;
 // nome inicial de curso de gradeBook1 é muito longo
 GradeBook gradeBook1( "CS101 Introduction to Programming in C++" );
 GradeBook gradeBook2( "CS102 C++ Data Structures" );

 // exibe courseName de cada GradeBook
 cout << "gradeBook1's initial course name is:"
 << gradeBook1.getCourseName()
 << "\ngradeBook2’s initial course name is: "
 << gradeBook2.getCourseName() << endl;

 // modifica courseName do myGradeBook (com uma string de comprimento válido)
 gradeBook1.setCourseName( "CS101 C++ Programming" );

 // exibe courseName de cada GradeBook
 cout << "\ngradeBook1's course name is: "
 << gradeBook1.getCourseName()
 << "\ngradeBook2's course name is: "
 << gradeBook2.getCourseName() << endl;
 return 0; // indica terminação bem-sucedida
 } // fim de main

 

 

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

 

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Joanderson Pereira Olá. Ótima essa sua atitude de fazer a implementação desse projeto. Parabéns!

Porém, não ficou clara qual é a sua dúvida :confused:

Logo de cara já se percebe que você definiu o Construtor da classe para receber dois parâmetros. Só que você está criando os objetos passando apenas um parâmetro, que é o nome do curso (!?)

Teria que ou mudar o Construtor para receber só um parâmetro ou passar dois parâmetros ao criar um novo objeto da classe

 

Mais alguma dúvida?

 

O código está rodando aí?

 

Classe GradeBook.hpp:

// Definição de classe GradeBook apresenta a interface public da
// classe. Definições de função-membro aparecem em GradeBook.cpp.
#pragma once

#include <iostream>
#include <string> // o programa utiliza classe de string padrão do C++
using namespace std;

class GradeBook
{
public:
    GradeBook();
    GradeBook( string name, string tutor);
    void setCourseTutor( string tutor );
    void setCourseName( string name );
    string getCourseName();
    string getCourseTutor();
    void displayMessage();
private:
    string courseName;
    string courseTutor;
    string name;
    string tutor;
};

Classe GradeBook.cpp:

// Implementações das definições de função-membro de GradeBook.
#include <iostream>
#include <string>
using namespace std;

#include "GradeBook.hpp" // inclui a definição de classe GradeBook

GradeBook::GradeBook() {

}


GradeBook::GradeBook( string name, string tutor )
    : courseName( name ), courseTutor (tutor)
{
    setCourseName( name );
    setCourseTutor( tutor );
}

void GradeBook::setCourseName( string name )
{
    if ( name.length() <= 15 )
        this->courseName = name;

    if ( name.length() > 15 )
    {

        this->courseName = name.substr( 0, 15 );

        cout << "Name " << name << " exceds maximum length (15).\n"
             << "Limiting courseName to first 15 characters.\n" << endl;
    }
}

string GradeBook::getCourseName()
{
    return this->courseName;
}

void GradeBook::setCourseTutor( string tutor )
{
    if ( tutor.length() <= 15 )
        this->courseTutor = tutor;

    if ( tutor.length() > 15 )
    {
        this->courseTutor = tutor.substr( 0, 15 );

        cout << endl;

        cout << "Name \"" << tutor << "\" exceds maximum length 15.\n"
             << "Limiting courseName to first 15 characters.\n" << endl;
    }
}

string GradeBook::getCourseTutor()
{
    return courseTutor;
}

void GradeBook::displayMessage()
{
    // chama getCourseName para obter o courseName
    cout << "Welcome to the grade book for\n" << getCourseName()
         << "!" << endl;

    cout << "This course is presented by: "<< getCourseTutor()
         << "!" << endl;

    cout << endl;

}

Classe Main.cpp:

// Cria e manipula um objeto GradeBook; ilustra a validação.
#include <iostream>
using namespace std;

#include "GradeBook.hpp" // inclui a definição de classe GradeBook
#include "GradeBook.cpp"

int main()
{

    GradeBook *gradeBook1 = new GradeBook("CS101 Introduction in C++", "Tutor 1");
    GradeBook *gradeBook2 = new GradeBook("CS102 C++ Structures", "Tutor 2");

    gradeBook1->displayMessage();
    gradeBook2->displayMessage();

    cout << "gradeBook1's initial course name is: "
         << gradeBook1->getCourseName()
         << "\ngradeBook2's initial course name is: "
         << gradeBook2->getCourseName() << endl;

    cout << endl;

    gradeBook1->setCourseName( "CS101 C++ Programming" );

    cout << "\ngradeBook1's course name is: "
         << gradeBook1->getCourseName()
         << "\ngradeBook2's course name is: "
         << gradeBook2->getCourseName() << endl;

    delete gradeBook1;

    delete gradeBook2;

    return 0;
}

Perceba que para criar um novo objeto se usa o operador new

Dá para fazer como você vem fazendo, mas vejo ser necessário saber a respeito de como criar um novo objeto de uma classe 

 

OBS: Código atualizado agora

Vê se é isso que você quer, ok?

Editado por giu_d
Correção no comentário

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×