diff --git a/cviceni/class.cpp b/cviceni/class.cpp new file mode 100644 index 0000000000000000000000000000000000000000..58934cfd1fc91d17ea5913c543ec5c1f70d2aed5 --- /dev/null +++ b/cviceni/class.cpp @@ -0,0 +1,99 @@ +#include <iostream> +#include <sstream> +#include <ctime> + +#define LEN 20 + +class MyRandom{ + private: + int seed; + int state; + static int pocet_objektu; + public: + int rand(); + static int getObjNum(){ + return pocet_objektu; + } + //*konstruktor + MyRandom(); + MyRandom(int seed); + + //*destruktor + ///vsechno uvolni + ~MyRandom(){ + std::cerr<<"zavolan destruktor"<<std::endl; + pocet_objektu--; + }; +}; + +int MyRandom::pocet_objektu=0; + +//*definice defaultniho konstruktoru +MyRandom::MyRandom(){ + pocet_objektu++; + seed=time(NULL); + state=seed; + std::cerr<<"zavolan defautni konstruktor"<<std::endl; +} + +//*parametrizovany konstruktor +MyRandom::MyRandom(int seed){ + pocet_objektu++; + seed=seed; + state=seed; + std::cerr<<"zavolam parametrizovany konstruktor"<<std::endl; +} + +//*musim pridat namespace (MyRadom) abych se dostal ke clenske funkci +int MyRandom::rand(void){ + state=(state * 1103515245 + 12345) & ((1U<<31)-1); + //*vracim hornich 16 bitu->15bit cislo + return state>>16; //+0...32767 + +} + +int main(int argc, char *argv[]){ + int *parr=new int[LEN]; + if(parr==NULL){ + std::cerr << "alokace se nepovedla" <<std::endl; + return 1; + } + + int seed=time(NULL); + if(argc>1){ + std::istringstream iss(argv[1]); + iss>>seed; + //if(!iss.good()) + if(!iss){ + std::cerr<<"chyba argumentu"<<std::endl; + std::cerr<<"pouziti:" <<argv[0]<<" [seed]"<<std::endl; + delete[] parr; + return 2; + } + } + + std::cerr<<"pocet instanci MyRandom:"<<MyRandom::getObjNum()<<std::endl; + + MyRandom rnd; + std::cerr<<"pocet instanci MyRandom:"<<MyRandom::getObjNum()<<std::endl; + + MyRandom rnd2(seed); + std::cerr<<"pocet instanci MyRandom:"<<MyRandom::getObjNum()<<std::endl; + + MyRandom *prnd=new MyRandom(seed); + std::cerr<<"pocet instanci MyRandom:"<<MyRandom::getObjNum()<<std::endl; + + for(int idx=0; idx<LEN; idx++){ + //parr[idx]=rnd.rand() %30; + parr[idx]=rnd2.rand() %30; + //parr[idx]=rand() & (32-1); + std::cout<<parr[idx]<<", "; + } + std::cout<<std::endl; + + delete prnd; + std::cerr<<"pocet instanci MyRandom:"<<MyRandom::getObjNum()<<std::endl; + + delete[] parr; //+uvolnime co jsme vzali + return 0; +} \ No newline at end of file