Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z klasami.

Ostatnio zmodyfikowano 2017-05-15 10:24
Autor Wiadomość
MoravenTolo
Temat założony przez niniejszego użytkownika
Problem z klasami.
» 2017-05-08 19:53:53
Mam takie dwa problemy:
1. Mam dwie jakies dowolne klasy User i Obiekt i chcę z poziomu klasy User zmienic wartość bool x z false na true. Mam problem z funkcją, gdyż prawdopodnie źle ją napisalem oraz z dostaniem się do setteraX w tej funkcji by ustawic wartość na true.
2. Chce stworzyć za pomocą vectora kilka obiektów i potem je wszystkie wyswietlic. Tutaj obiekt ma tylko jedna zmienna true lub false, ale chodzi o sam sens i czy dobrze korzystam z tworzenia kilku obiektów naraz za pomocą vectora i jak je wszystkie wyswietlić?
C/C++
#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>
using std::string;
using std::cout;
using std::endl;

class User
{
    string nazwa;
public:
    void User::zmienX( const Obiekt & obiekt )
    {
        if( obiekt.getX() == false ) obiekt.setX( true ); //jak dostac sie do tej zmiennej x z poziomu klasy User? funkcje raczej zle napisalem
       
    }
};

class Obiekt
{
    bool x;
public:
    //konstruktory i destruktory
    Obiekt::Obiekt( bool x )
    {
        cout << "konstruktor obiektu";
    }
    Obiekt::Obiekt()
    {
        cout << "destruktor obiektu";
    }
   
    //metody
    void Obiekt::wyswietl()
    {
        cout << "x = " << x << endl;
    }
   
    //setters and getters
    bool Obiekt::getX() const
    {
        return x;
    }
   
    void Obiekt::setX( bool x )
    {
        Obiekt::x = x;
    }
   
};

int main()
{
    Obiekt * o = new Obiekt( false );
    o->wyswietl();
    std::vector < Obiekt *> obiekt = { new Obiekt( false ), new Obiekt( true ) };
    obiekt->wyswietl(); // jak wyswietlic wszystkie stworzone dynamicznie obiekty?
    system( "pause" );
    return 0;
}
[ / cpp ]
P-160860
michal11
» 2017-05-08 20:02:43
Moim zdaniem klasa Obiekt jest dobrze napisana.

W main() masz wyciek pamięci, nie zwalniasz zaalokowanej pamięci.

Jeżeli chcesz wywołać funkcję na wszystkich obiektach w vectorze to wystarczy zwykła pętla
C/C++
std::vector < Type > MyTypes;

for( const Type & t: MyTypes )
{
    t.fun();
}
P-160861
MoravenTolo
Temat założony przez niniejszego użytkownika
» 2017-05-15 09:56:18
Punkt drugi już jakoś tam zrobiłem, ale czy pomoże ktoś jeszcze z tym punktem pierwszym? Ze zmianną wartości boola z poziomu klasy User?
P-161135
michal11
» 2017-05-15 10:09:21
Nie rozumiem jaki masz problem, masz dobrze napisaną klasę Obiekt, nie powinieneś się odwoływać bezpośrednio do zmiennej tej klasy tylko korzystać z funkcji. Prawdopodobnie dostajesz błędy kompilacji typu
undefined reference
 jeżeli tak to zamień miejscami deklaracje klas User i Obiekt, jeżeli to coś innego to klej aktualny kod i dokładne błędy jakie dostajesz.
P-161136
karambaHZP
» 2017-05-15 10:24:49
P-161138
« 1 »
  Strona 1 z 1