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();
};
```