Kezdőoldal » Számítástechnika » Programozás » Mit jelent ez a sor? C++

Mit jelent ez a sor? C++

Figyelt kérdés

/*Ezt a sort nem értem:

Cat *pRealCat = dynamic_cast<Cat *> (Zoo[i]);

---------

A 24 órás könyvből tanulok.*/

//main.cpp

# include <iostream>


typedef unsigned short ushort;

typedef unsigned int uint;

using namespace std;



class Mammal {

public:

Mammal(short age): itsAge(age) { cout <<"Mammal Konstruktor \n"; }

Mammal(const Mammal &rhs);

virtual ~Mammal() { cout <<"Mammal virtual Destruktor \n"; }


virtual Mammal* Copy()const { return new Mammal(*this); }

virtual void Speak()const { cout <<"Mammal beszel \n"; }


void SetAge(short age) { itsAge = age; }

short GetAge()const { return itsAge; }

protected:

short itsAge;

private: };


Mammal::Mammal(const Mammal &rhs): itsAge(4) {

cout <<"Mammal copy Konstruktor \n"; }


class Dog: public Mammal {

public:

Dog(short age): Mammal(age) { cout <<"Dog Konstruktor \n"; }

Dog(const Dog &rhs);

virtual ~Dog() { cout <<"Dog virtual Destruktor \n"; }


virtual Mammal* Copy()const { return new Dog(*this); }

virtual void Speak()const { cout <<"Vau,vau \n"; }

protected:

private: };


Dog::Dog(const Dog &rhs): Mammal(rhs) {

cout <<"Dog copy Konstruktor \n"; }


class Cat: public Mammal {

public:

Cat(short age): Mammal(age) { cout <<"Cat Konstruktor \n"; }

Cat(const Cat &rhs);

virtual ~Cat() { cout <<"Cat virtual Destruktor \n"; }


virtual Mammal* Copy()const { return new Cat(*this); }

virtual void Speak()const { cout <<"Miau,miau \n"; }


void Purr()const { cout <<"prrrrrrrrrrr \n"; }

protected:

private: };


Cat::Cat(const Cat &rhs): Mammal(rhs) {

cout <<"Cat copy Konstruktor \n"; }



int main() {

const short numberMammal = 3;

Mammal *Zoo[numberMammal];

Mammal *pMammal = NULL;

short choice,i;


for(i = 0;i < numberMammal;i++) {

cout <<"(1)Dog,(2)Cat: ";

cin >> choice;


if(choice == 1)

pMammal = new Dog(2);

else

pMammal = new Cat(2);

Zoo[i] = pMammal; }


cout << endl;


for(i = 0;i < numberMammal;i++) {

Zoo[i]->Speak();

Cat *pRealCat = dynamic_cast<Cat *> (Zoo[i]);


if(pRealCat)

pRealCat->Purr();

else

cout <<"Huha ez nem macska \n";

delete Zoo[i];

cout << std::endl; }



return 0; }


2012. jún. 14. 00:11
1 2 3
 1/23 A kérdező kommentje:

Please ne csak olyan nagyjából választ adjatok :)

Zöld kezezni fogok.

2012. jún. 14. 00:14
 2/23 anonim ***** válasza:

Már nem azért, de nem unod még, hogy mindig betolsz ide egy kilométeres kódot (ami mellesleg egy könyvből van, ahol elvileg pont ezt tanítják, hogy mi van benne) és várod a választ?


Könnyebb lenne kicsit nekiülni a keresőnek és megtalálni a választ.

Ez jó lenne neked, mert hamarabb és ráadásul garantáltan meglenne a megoldás, illetve még többet tanulnál is vele.

Illetve jó lenne "nekünk" is mert nem kéne neked választ írni.


De hogy ne mondhass, hogy semmit nem segítettem:

[link]


Itt MINDENT megtalálsz, amit eddig kérdeztél, csak figyelmesen el kell olvasni és értelmezni.

2012. jún. 14. 00:25
Hasznos számodra ez a válasz?
 3/23 A kérdező kommentje:

De nem tudok angolul :(

De miért nem akarsz segíteni.

Azért tettem fel a kérdést mert nem értem amit le ír a könyv.


Mit csinál ez:

Cat *pRealCat = dynamic_cast<Cat *> (Zoo[i]);

Azt tudom,hogy hozzárendel egy memóriacímet.

De mi az a dynamic_cast nem hasonlít függvényre.

Utána jön egy < jel amibe benne van a Cat * és itt minek van a csillag jel.

Amúgy ezt nem írhatom utána mert nem jó:Cat *rhs

(Zoo[i]); aztán ez jön benne egy zárójelben hát mi ez?


ebből nem értek semmit: dynamic_cast<Cat *> (Zoo[i]);

2012. jún. 14. 00:32
 4/23 A kérdező kommentje:

Küzdök a magyarázatért de segítsetek ti is ne legyetek arrogánsak.

dynamic_cast <új_típus> (kifejezés)

Ha az új típus helyére azt írom,hogy <Dog *> akkor?

De ez létrehoz egy új objektumot vagy mit is csinál pontosan.


kifejezés helyére meg azt az objektumot írom amit más típusúként akarok kezelni?

És,hogy milyen típusúként akarom kezelni az megy ide?: < >

2012. jún. 14. 00:42
 5/23 anonim ***** válasza:

Semmi arrogancia nem volt abban amit írtam.


De tessék, itt van magyar találat is: [link]


"Konverziós operátorok"-ok alatt.

2012. jún. 14. 00:51
Hasznos számodra ez a válasz?
 6/23 A kérdező kommentje:
Ne haragudj de nem értem.
2012. jún. 14. 01:38
 7/23 anonim ***** válasza:
már megint a Mammal-os srác :-D
2012. jún. 14. 01:56
Hasznos számodra ez a válasz?
 8/23 anonim ***** válasza:
100%

egyébként azt csinálja, hogy megpróbálja "átalakítani" a Mammal típusú, Zoo tömb elemeit Cat típusúvá (pontosabban a Mammal pointert próbálja Cat pointerré "alakítani"), és ha sikerült átalakítani, azaz a pRealCat nem "null", akkor meghívja a Purr metódust, egyébként kiírja, hogy ez nem macska.

majd törli az adott elemet


legalábbis szerintem ezt csinálja, de mindjárt jön iostream, és remélhetőleg megtanít minket típust átalakítani. vagy kapunk egy lmgtfy linket, mert igazából már ő is kezdi unni a kereső használatának a hiányát, annak ellenére, hogy mindig írod, hogy nem tudsz angolul

2012. jún. 14. 02:02
Hasznos számodra ez a válasz?
 9/23 anonim ***** válasza:
100%

egyébként azt próbáltad már, hogy a kód mellett/alatt/fölött lévő szöveget elolvasod hozzá?

ott elvileg el van magyarázva mi mit csinál :-D

2012. jún. 14. 02:03
Hasznos számodra ez a válasz?
 10/23 _Jessy_ ***** válasza:
100%

Cat *pRealCat = dynamic_cast<Cat *> (Zoo[i]);

A Zoo tömb i-edik elemét megvizsgálja. Ha az egy Cat objektumra mutató pointer, akkor visszatér ezzel a címmel. Ha nem az, akkor meg NULL-al. Nagyjából ennyi. Olyan mintha azt írnád, hogy:

Cat *pRealCat = (Cat*)(Zoo[i]);

azzal a különbséggel, hogy ebben az esetben a pRealCat nem lesz NULL akkor sem, ha az adott memóriaterületen valami más van. És persze futásidejű hibákhoz vezethet, ha valami egyéb van ott.

És ahogy már írták: NE ILLESSZ BE EGYMILLIÓ SOR KB..OTT KÓDOT, AMINEK NINCS KÖZE A KÉRDÉSHEZ!!! Nagyjából ennek is köszönheted, hogy a kutya se válaszol a kérdéseidre.

2012. jún. 14. 12:25
Hasznos számodra ez a válasz?
1 2 3

További kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!