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

C++ modyfikacja oryginalnego obiektu

Ostatnio zmodyfikowano 2017-01-30 16:47
Autor Wiadomość
KingLemon
Temat założony przez niniejszego użytkownika
C++ modyfikacja oryginalnego obiektu
» 2017-01-30 16:36:43
Witam, robię program, w którym implementuję klasę gear czyli koło zębate i moim celem jest "połączenie" kilku gearów a potem kiedy poruszam jednym, to te połączone z nim też się poruszą, tylko w odwrotnym kierunku.

oto klasa gear:

C/C++
#ifndef GEAR_H_INCLUDED
#define GEAR_H_INCLUDED

#include <iostream>
#include <vector>

using std::vector;
using namespace std;

class gear
{
public:
   
    gear();
   
    ~gear();
   
    vector < gear > wek;
   
    int kat;
    void obrot( int kat_temp );
    void wyswietl();
    void polacz( gear & a2 );
    //gear& a2
};

#endif

implementacja metod:

C/C++
#include <iostream>
#include <vector>
#include "gear.h"

using std::vector;
using namespace std;

gear::gear()
{
    kat = 0;
}

gear::~gear()
{
   
}

void gear::polacz( gear & a2 ) {
   
    wek.push_back( a2 );
}


void gear::obrot( int kat_temp )
{
    int e = wek.size();
   
    this->kat = this->kat + kat_temp;
   
    if( e == 0 ) {
        cout << "znajduje 0 polaczonych elemele" << endl;
    }
   
    if( e == 1 ) {
        cout << "znajduje 1 polaczony elemele" << endl;
    }
   
    //przeskakuje przez wszystkie elementy wektora i odejmuje wartosc, ktora dodajemy do poruszanego geara
    for( int i = 0; i < wek.size(); i++ ) {
        cout << "uruchomienie petli " << endl;
       
        gear & b = wek[ i ];
        cout << "przed" << "\n" << b.kat << endl;
        b.kat = b.kat - kat_temp;
        cout << "po" << "\n" << b.kat << endl;
    }
   
}

void gear::wyswietl()
{
    cout << kat << endl;
}


funkcja main :
C/C++
#include <iostream>
#include <vector>
#include "gear.h"
using std::vector;
using namespace std;

int main() {
    gear a1;
    gear a2;
   
    a1.wyswietl();
    a2.wyswietl();
   
   
    a1.polacz( a2 );
    a1.obrot( 100 );
   
    cout << "A1:" << endl;
    a1.wyswietl();
    cout << "A2:" << endl;
    a2.wyswietl();
   
    return 0; }

Oczywiście chciałbym, żeby kąt obiektu a2 przy drugim wyświetleniu był równy -100. Na pewno mam problem z referencjami, i nie wiem czy użycie vectora też jest odpowiednim krokiem. Dodam, że nie jestem zaawansowanym programistą :)
P-157121
carlosmay
» 2017-01-30 16:46:53
Jedno co przychodzi mi do głowy to klasa implementująca koło zębate oraz klasa implementująca mechanizm kół zębatych.
Teraz można w klasie mechanizmu poruszać wszystkimi kołami dodanymi do mechanizmu.

using namespace std;
w pliku nagłówkowym to zła praktyka.
P-157123
Gibas11
» 2017-01-30 16:47:08
Trzymaj w wektorze
std::reference_wrapper < gear >
, teraz operujesz na kopiach.
P-157124
« 1 »
  Strona 1 z 1