Advertisement
borisdexter

Objektno polimorfizam gr1

Jan 23rd, 2020
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.42 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. // abstract class - klasa shto ima samo virtuelni metodi
  4. class Abstract{
  5. public:
  6.  
  7. virtual void jumpAttack()=0;
  8. virtual void basicAttack(){
  9. cout<<"class Attack"<<endl;
  10. }
  11. };
  12.  
  13. class Enemy{
  14. protected:
  15. int health;
  16. int movement;
  17. public:
  18. Enemy(){}
  19. Enemy(int health,int movement){
  20. this->health=health;
  21. this->movement=movement;
  22. }
  23.  
  24. virtual ~Enemy(){
  25. cout<<"Enemy destructor"<<endl;
  26. }
  27. };
  28.  
  29. class Kursum: public Enemy, public Abstract{
  30. private:
  31. char kalibar[5];
  32. public:
  33. Kursum(){}
  34. Kursum(int health,int movement,char kalibar[]):Enemy(health,movement){
  35. strcpy(this->kalibar,kalibar);
  36. }
  37. void jumpAttack(){
  38. cout<<"Kursum jump attack"<<endl;
  39. }
  40. ~Kursum(){
  41. cout<<"Kursum destructor"<<endl;
  42. }
  43. };
  44. class Pecurka: public Enemy, public Abstract{
  45. private:
  46. char boja[15];
  47. public:
  48. Pecurka(){}
  49. Pecurka(int health,int movement,char boja[]):Enemy(health,movement){
  50. strcpy(this->boja,boja);
  51. }
  52. void jumpAttack(){
  53. cout<<"Pecurka jump attack"<<endl;
  54. }
  55. ~Pecurka(){
  56. cout<<"Pecurka destructor"<<endl;
  57. }
  58. };
  59.  
  60. void funkcija(Abstract **niza,int n){
  61. for(int i=0;i<n;i++){
  62. niza[i]->jumpAttack();
  63. }
  64. }
  65. int main(){
  66. Abstract **niza=new Abstract*[2];
  67. niza[0] = new Pecurka(100,2,"crvena");
  68. niza[1] = new Kursum(250,1,"crn");
  69. delete []niza;
  70. funkcija(niza,2);
  71. return 0;
  72. }
  73.  
  74. // virtual - moze i ne mora da se preoptovari | proveruva prvo dali e preoptovarena funkcijata
  75. // pure virtual - mora da se preoptovari
  76. class Zivotno{
  77. protected:
  78. char boja[15];
  79. float tezina;
  80. public:
  81. Zivotno(){
  82. //cout<<"Default constructor Zivotno"<<endl;
  83. }
  84. Zivotno(char boja[],float tezina){
  85. //cout<<"Parameter constructor Zivotno"<<endl;
  86. strcpy(this->boja,boja);
  87. this->tezina=tezina;
  88. }
  89. // obicna virtuelna funkcija
  90. virtual void print(){
  91. cout<<"Zivotno print()"<<endl;
  92. }
  93. // cisto virtuelna funkcija
  94. virtual float damage()=0;
  95. //
  96. virtual char tip()=0;
  97.  
  98. char* getBoja(){
  99. return boja;
  100. }
  101.  
  102. ~Zivotno(){
  103. cout<<"Default destructor Zivotno"<<endl;
  104. }
  105. };
  106. class Kuce:public Zivotno{
  107. private:
  108. char rasa[15];
  109. bool daliKasa;
  110. public:
  111. Kuce(){
  112. //cout<<"Default constructor Kuce"<<endl;
  113. }
  114. Kuce(char boja[],float tezina,char rasa[],bool daliKasa):Zivotno(boja,tezina){
  115. //cout<<"Parameter constructor Kuce"<<endl;
  116. // ovie gi pishuvame ako nemavme constructor od Zivotno
  117. //strcpy(this->boja,boja);
  118. //this->tezina=tezina;
  119. strcpy(this->rasa,rasa);
  120. this->daliKasa=daliKasa;
  121. }
  122.  
  123. // preoptovaruvame cisto virtuelnata funkcija
  124. float damage(){
  125. if(tezina>20){
  126. return 30;
  127. }else{
  128. return 15;
  129. }
  130. }
  131.  
  132. void print(){
  133. cout<<"Kuce "<<boja<<" "<<tezina<<" "<<rasa<<" "<<daliKasa<<endl;
  134. }
  135.  
  136. char tip(){
  137. return 'k';
  138. }
  139. ~Kuce(){
  140. //cout<<"Default destructor Kuce"<<endl;
  141. }
  142. };
  143.  
  144. class Petel:public Zivotno{
  145. private:
  146. bool daliKukurika;
  147. public:
  148. Petel(){
  149. //cout<<"Default constructor Petel"<<endl;
  150. }
  151. Petel(char boja[],float tezina,bool daliKukurika):Zivotno(boja,tezina){
  152. //cout<<"Parameter constructor Petel"<<endl;
  153. // ovie gi pishuvame ako nemavme constructor od Zivotno
  154. //strcpy(this->boja,boja);
  155. //this->tezina=tezina;
  156. this->daliKukurika=daliKukurika;
  157. }
  158.  
  159. // override na Zivotno.print();
  160. void print(){
  161. cout<<"Petel "<<boja<<" "<<tezina<<" "<<daliKukurika<<endl;
  162. }
  163.  
  164. char tip(){
  165. return 'p';
  166. }
  167.  
  168. float damage(){
  169. if(daliKukurika){
  170. return 10;
  171. }else{
  172. return 5;
  173. }
  174. }
  175.  
  176. ~Petel(){
  177. //cout<<"Default destructor Petel"<<endl;
  178. }
  179. };
  180.  
  181. void printZivotni(Zivotno **niza,int n){
  182. for(int i=0;i<n;i++){
  183. niza[i]->print();
  184. cout<<niza[i]->damage()<<endl;
  185. }
  186. }
  187.  
  188. void kuceVSpetel(Zivotno **niza,int n){
  189. int brojKucinja=0;
  190. int brojPetli=0;
  191. for(int i=0;i<n;i++){
  192. // prva opcija
  193. Kuce *pK=dynamic_cast<Kuce*>(niza[i]);
  194. // ako pokazuvacot ne e 0 uspeshno sme kastirale
  195. if(pK!=0){
  196. brojKucinja++;
  197. }
  198. Petel *pP=dynamic_cast<Petel*>(niza[i]);
  199. if(pP!=0){
  200. brojPetli++;
  201. }
  202. // vtora opcija
  203. if(niza[i]->tip()=='k'){
  204. brojKucinja++;
  205. }else if(niza[i]->tip()=='p'){
  206. brojPetli++;
  207. }
  208. }
  209. cout<<"Kuce "<<brojKucinja<<":"<<brojPetli<<" Petel"<<endl;
  210. }
  211.  
  212.  
  213. void najvekjeDamage(Zivotno **niza,int n){
  214. float maxDamage=0;
  215. int pamtiIndex;
  216. for(int i=0;i<n;i++){
  217. if(niza[i]->damage()>maxDamage){
  218. maxDamage=niza[i]->damage();
  219. pamtiIndex=i;
  220. }
  221. }
  222. cout<<"Zivotno so najvekje damage"<<endl;
  223. niza[pamtiIndex]->print();
  224. }
  225.  
  226. void vkupenDamage(Zivotno **niza,int n){
  227. float suma=0;
  228. for(int i=0;i<n;i++){
  229. suma+=niza[i]->damage();
  230. }
  231. cout<<"Prosecniot damage e "<<suma/n<<endl;
  232. }
  233.  
  234. void siteZivotniNadX(Zivotno **niza,int n,int x){
  235. int flag=1;
  236. for(int i=0;i<n;i++){
  237. if(niza[i]->damage()<=x){
  238. flag=0;
  239. break;
  240. }
  241. }
  242. if(flag==1){
  243. cout<<"Site praat nad "<<x<<" damage"<<endl;
  244. }else{
  245. cout<<"Ne praat site nad "<<x<<" damage"<<endl;
  246. }
  247. }
  248.  
  249. void siteBeliZivotni(Zivotno **niza,int n){
  250. for(int i=0;i<n;i++){
  251. if(strcmp(niza[i]->getBoja(),"bela")==0){
  252. niza[i]->print();
  253. }
  254. }
  255. }
  256. int main(){
  257. // obicna zivotno niza
  258. //Zivotno niza[3];
  259. // dinamicki alocirana niza
  260. //Zivotno *niza=new Zivotno[3];
  261. Zivotno **niza=new Zivotno*[4];
  262. niza[0]=new Kuce("crna",15,"dzukela",false);
  263. niza[1]=new Petel("bela",2,true);
  264. niza[2]=new Kuce("bela",20,"labrador",true);
  265. niza[3]=new Petel("crvena",5,false);
  266. //printZivotni(niza,4);
  267. //kuceVSpetel(niza,4);
  268. //najvekjeDamage(niza,4);
  269. //vkupenDamage(niza,4);
  270. //siteZivotniNadX(niza,4,10);
  271. siteBeliZivotni(niza,4);
  272. return 0;
  273. }
  274.  
  275. /*
  276. class DebitCard{
  277. protected:
  278. char *name;
  279. float balance;
  280. long int cardID;
  281. public:
  282. DebitCard(){
  283. //delete []name;
  284. name=new char[0];
  285. }
  286. DebitCard(char *name,float balance,long int cardID){
  287. this->name=new char[strlen(name)+1];
  288. strcpy(this->name,name);
  289. this->balance=balance;
  290. this->cardID=cardID;
  291. }
  292.  
  293. void print(){
  294. cout<<name<<" balance: "<<balance<<endl;
  295. }
  296.  
  297. void deposit(float amount){
  298. this->balance+=amount;
  299. }
  300.  
  301. DebitCard &operator+=(float amount){
  302. this->balance+=amount;
  303. return *this;
  304. }
  305.  
  306. void withdraw(float amount){
  307. if(amount>balance){
  308. cout<<"Not enough credits"<<endl;
  309. }else{
  310. balance-=amount;
  311. }
  312. }
  313. };
  314.  
  315. class CreditCard:public DebitCard{
  316. private:
  317. int limit;
  318. public:
  319. CreditCard(){}
  320. CreditCard(char *name,float balance,long int cardID,int limit):DebitCard(name,balance,cardID){
  321. this->limit=limit;
  322. }
  323.  
  324. void withdraw(float amount){
  325. if(amount>balance+limit){
  326. cout<<"Not enough credits"<<endl;
  327. }else{
  328. balance-=amount;
  329. }
  330. }
  331. ~CreditCard(){}
  332. };
  333. int main(){
  334. DebitCard random("Petar",250,1765432199);
  335. random.print();
  336. cout<<"Adding 2500"<<endl;
  337. random+=2500;
  338. random.print();
  339. random.withdraw(3000);
  340. random.withdraw(2000);
  341. random.print();
  342.  
  343. CreditCard random2("Petar2",250,1765432199,20000);
  344. random2.print();
  345. cout<<"Adding 20000"<<endl;
  346. random2+=20000;
  347. random2.print();
  348. random2.withdraw(50000);
  349. random2.withdraw(30000);
  350. random2.print();
  351. return 0;
  352. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement