Korzystanie jednej klasy z obiektów i metod drugiej. (Zaprzyjaźnianie klas?)

0

Witam,
mój problem polega na tym, że mam klasy:
Semafory, Pisarze, Czytelnicy

Semafory posiada dwie metody P(); i V(); (P zmniejsza o 1 zmienną prywatną "semafor", a V zwieksza o 1)
Chciałbym żeby obiekty z klas Pisarze i Czytelnicy mogły używać tych metod na istniejących obiektach klasy Semafory.

jak to zrobić? :/ (nie załączam plików "czytelnicy" bo w sumie tak samo będzie to wyglądać na "pisarze")

```cpp
#ifndef SEMAFORY_H
#define SEMAFORY_H
/*klasa semafory, zawiera dwie metody podstawowe:
1. Opuszczanie semafora.
2. Podnoszenie semafora.
Oraz 1 metode pomocnicza zwracajaca stan semafora;

#include "pisarze.h"
#include "czytelnicy.h"
*/

class Semafory
{
private:
    int semafor;

public:
    Semafory();
    void V();
    void P();
    int stan();
//    friend void Pisarze::pisz();
  //  friend void Pisarze::kasuj();
    //friend void Czytelnicy::czytaj();
//    friend void Czytelnicy::wyjdz();
};


#endif
 
```
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~semafory.cpp~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```cpp
 
#include <string>
#include <stdio.h>
#include <iostream>
#include "semafory.h"
using namespace std;


Semafory::Semafory()
{
    semafor = 0;
}
 /*metoda opuszczaj¹ca semafor. Nadaje semaforowi wartoœæ */
void Semafory::V()
{
    cout << "Zastosowano metode V();\n";
    if(!semafor)
    {
        cout << "Semafor jest rowny: " << ++semafor<<endl;
    }
    cout << "Nie mozna opuscic semafora. Semafor juz opuszczony.\n";
}

void Semafory::P()
{
    cout << "Zastosowano metode P();\n";
    if(semafor)
    {
        cout << "Semafor jest rowny: " << --semafor <<endl;
    }
    cout<< "Nie mozna podniesc semafora, poniewaz jest juz podniesiony!"<<endl;
}

int Semafory::stan()
{
    cout << "Aktualna wartosc semafora to: "<<semafor<<endl;
    return semafor;
}
```
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~main.cpp~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```cpp
 #include <iostream>
#include "semafory.h"
#include "pisarze.h"
using namespace std;
int main()
{
    Pisarze p1;
    p1.pisz();
    cout <<"dasdsaadasdasdadadas\n";
    Semafory b1[10];    //bufor 1
    Semafory b2[10];    //bufor 2
    b1[0].P();
    b1[1].V();

    cout<< "stan bufora 1;\n";
    for(int i = 0; i<10; i++)
    {
        cout << i+1 <<". ";
        b1[i].stan();
    }

    cout<< "stan bufora 2;\n";
    for(int i = 0; i<10; i++)
    {
        cout << i+1 <<". ";
        b2[i].stan();
    }
}
```
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~pisarze.h~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```cpp
#ifndef PISARZE_H
#define PISARZE_H

using namespace std;

class Pisarze
{
public:
    Pisarze();
    void pisz();
    void kasuj();
};



#endif
 
```
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~pisarze.cpp~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```cpp
#include "semafory.h"
#include "pisarze.h"
using namespace std;


void Pisarze::pisz(Semafory::Semafory semafor)
{
    Semafory::P();
};

 
```
1

umieść obiekt klasy semafory wewnątrz klas pisarze i czytelnicy. Później się odwołujesz do metody np tak: nazwa_obiektu.V();

0

okej ;d
w pliku pisarze.cpp umieściłem coś takiego:

 void Pisarze::pisz(Semafory::Semafory &semafor)
{
    semafor.Semafory::V();
};

i odwoluje się w ten sposób i działa:

pisarz.pisz(semafor);  
0

nazwa klasy powinna być w liczbie pojedynczej, bo „Semafory” czy „Pisarze” sugeruje że to kolekcja jakaś jest, a nie jeden Semafor czy jeden Pisarz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1