• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie właściwości klasy zawartej w konstruktorze

0 głosów
115 wizyt
pytanie zadane 18 listopada 2015 w C i C++ przez radek024 Szeryf (75,200 p.)

Witam, mam problem związany z losowaniem/wpisywaniem nowej wartości dla właściwości klasy w kontruktorze. Uczę się funkcji zapryzjaźnionych i chcę napisać pianino, które ma wspólną funkcję grającą nuty. 

 

#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <ctime>
using namespace std;

class Pianista;

class Piano
{
	int nuta;
	
	public:
		Piano()
		{
			nuta=15000;
		}
		
		Piano(char zklaw)
		{
			cout<<"Podaj czestotliwosc zagranego dzwieku: "; cin>>nuta;
		}
		
		Piano(string losowanko)
		{
			nuta=rand()%700+250;
		}
		
		friend void grajnuty(Piano &forte, Pianista &radek);
};

class Pianista
{
	int ilnut;
	
	public:
		Pianista()
		{
			ilnut=20;
		}
		
		Pianista(char zklaw)
		{
			cout<<"Podaj ilosc zagranych dzwiekow: "; cin>>ilnut;
		}
		
		Pianista(int losuj)
		{
			ilnut=rand()%50+1;
			cout<<"Zagranych zostanie "<<ilnut<<" nut."<<endl;
		}
		
		
		
		
		friend void grajnuty(Piano &forte, Pianista &radek);
};

	void grajnuty(Piano &granie, Pianista &radek)
		{
			cout<<"Ilosc nut: "<<radek.ilnut<<endl;
			for(int i=0;i<radek.ilnut; i++)
			{
				Beep(granie.nuta,1000);
				cout<<"czestotliwosc: "<<granie.nuta<<endl;
			}
		}
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
	srand(time(NULL));
	Piano forte=Piano("losuje");
	Pianista radek=Pianista(1);
	grajnuty(forte, radek);
	return 0;
}

Wszystko powinno działać, jednakże nuty nie losują się - co mnie dziwi, ponieważ jest użyty odpowiedni kontruktor i nuta powinna sama automatycznie się zmieniać. Ktoś wie jak temu zaradzić?

1 odpowiedź

0 głosów
odpowiedź 18 listopada 2015 przez event15 Szeryf (94,240 p.)
Piano(string losowanko)
{
    nuta=rand()%700+250;
}

To jest bezsensu. Po co przeciążasz konstruktor skoro i tak nie wykorzystujesz tego?

Tak samo tutaj:
 

Pianista(int losuj)
        {
            ilnut=rand()%50+1;
            cout<<"Zagranych zostanie "<<ilnut<<" nut."<<endl;
        }

A to:

void grajnuty(Piano &granie, Pianista &radek)
        {
            cout<<"Ilosc nut: "<<radek.ilnut<<endl;
            for(int i=0;i<radek.ilnut; i++)
            {
                Beep(granie.nuta,1000);
                cout<<"czestotliwosc: "<<granie.nuta<<endl;
            }
        }

Co to ma znaczyć? Najpierw zaczynasz ładnie, obiektowo, a następnie robisz ze wszystkiego kaszę i proceduralnie?

To powinno być w klasie parametry ustawiane w konstruktorze, a pętla for w jakiejś metodzie. 

W ogóle jakoś mi to dziwnie wygląda wszystko.

komentarz 18 listopada 2015 przez radek024 Szeryf (75,200 p.)
Chcę to zrobić za pomocą dwóch klas, więc wartości muszę wyciągać za pomocą operatora wyłuskania - inaczej tego nie zrobię. Losowania natomiast inaczej nie zrobię, ponieważ się po prostu nie da(lub nie potrafię).

Podobne pytania

0 głosów
1 odpowiedź 220 wizyt
0 głosów
3 odpowiedzi 161 wizyt
0 głosów
2 odpowiedzi 102 wizyt
pytanie zadane 22 maja 2016 w PHP przez Kacper Duda Obywatel (1,970 p.)

86,526 zapytań

135,279 odpowiedzi

300,596 komentarzy

57,276 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...