-1
In python I made the following code:
class Escola:
def __init__( self, escola_nome ):
self.escola_nome = escola_nome
self.alunos = []
class Aluno:
def __init__( self, nome ):
self.nome = nome
self.escola = None
def matricular( self, escola ):
if not self.escola:
escola.alunos.append( self )
self.escola = escola
print( f'{self.nome} se matriculou na escola {self.escola.escola_nome}' )
else:
print( f'{self.nome} já está matriculado na escola {self.escola.escola_nome}' )
estadual = Escola( "Alguma escola aqui" )
alguem = Aluno( "lucas" )
alguem.matricular( estadual )
print( f"Escola de Lucas: {alguem.escola.escola_nome}" )
In the above code the "matricular" method adds the object being used in a list that is in another class.
I tried to do this same exercise in C++, I’m having difficulty getting the class to add its own object in a vector that stays in the other class and I’m also having some other problems.
The code went like this:
#include <iostream> // std::cout
#include <vector> // std::vector
struct Escola
{
Escola( std::string school_name="" ): nome_escola( school_name ) {}
std :: string nome_escola;
std :: vector< Aluno > estudantes; // Erro: o struct "Aluno" não existe
};
struct Aluno
{
Aluno( std::string name ): nome( name ) {}
void matricular( Escola& school );
// se colocasse o struct "Aluno" antes do struct "Escola" também haveria erro
// pois o struct "Escola" ainda não estaria definido seria preciso usá-lo aqui
std :: string nome;
Escola escola;
};
void Aluno :: matricular( Escola& school )
{
//if( escola != NULL ) não sei verificar se um objeto está vazio. dessa maneira não funcionou
school.estudantes.push_back( /*Aqui deveria ser adicionado o objeto que está usando o método "matricular". não sei como faz isso em C++*/ );
escola = school;
}
int main( void )
{
Escola estadual = Escola( "Algum nome de escola aqui" );
Aluno inteligente = Aluno( "João" );
inteligente.matricular( estadual );
std :: cout << inteligente.escola.nome_escola << "\n";
return 0;
}