Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pozivanje virtuelnih funkcija iz konstruktora bazne klase

[es] :: C/C++ programiranje :: Pozivanje virtuelnih funkcija iz konstruktora bazne klase

[ Pregleda: 4478 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mirko Rajkovača
Subotica

Član broj: 18458
Poruke: 119
82.131.178.*



Profil

icon Pozivanje virtuelnih funkcija iz konstruktora bazne klase27.12.2006. u 00:27 - pre 211 meseci
imam sledeci problem:
Klasa B je nasledjena iz klase A, prilikom kreiranja klase B prvo se poziva konstruktor klase A, koji bi trebao da pozove jednu virtuelnu funkciju koja je overlodovana(srpski engleski) od strane klase B, medjutim izvrsava se funkcija klase A (sto je normalno za C++ prilikom konstruktora bazne klase koliko sam video na netu) medjutim meni je potrebno da se pozove funkcija klase B. Nadam se da vam je jasno sta hocu da postignem. Svaka ideja je dobrodosla
Hvala unapred!
Razlika izmedju softvera i hardvera je:
Softver je nesto sto mozes psovati, a hardver je... pa hardver je nesto sto mozes sutati
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.fibertel.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Pozivanje virtuelnih funkcija iz konstruktora bazne klase27.12.2006. u 01:29 - pre 211 meseci
Procitaj ovo:

http://www.artima.com/cppsource/nevercall.html

Citat:
Don't call virtual functions during construction or destruction, because such calls will never go to a more derived class than that of the currently executing constructor or destructor.


Ukratko menjaj dizajn klase.


Tko leti vrijedi
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.co.yu.



+9 Profil

icon Re: Pozivanje virtuelnih funkcija iz konstruktora bazne klase27.12.2006. u 10:18 - pre 210 meseci
Mislim da je kiklop u pravu.
E, sada ako baš želiš tako nešto verovatno bi to mogao da postigneš tako što ćeš tu funkciju u klasi B dodatno da proglasiš statičnom. Onda bi trebalo da se izvrši njen poziv. Naravno, to opet menja dizajn klase na neki način, a i dođe malo neprirodno da radiš tako nešto.
Ne sećam se da sam skoro probao tako nešto, ali vidi pa javi šta si uradio.
 
Odgovor na temu

Mirko Rajkovača
Subotica

Član broj: 18458
Poruke: 119
*.com
Via: [es] mailing liste



Profil

icon Re: Pozivanje virtuelnih funkcija iz konstruktora bazne klase27.12.2006. u 10:28 - pre 210 meseci
Toga sam se bojao, totalno sam prevideo ovu stvar kada sam poceo sa
dizajniranjem klasa. Ipak stoji ona programerska prvo osmisli pa
kodiraj...:)
Razlika izmedju softvera i hardvera je:
Softver je nesto sto mozes psovati, a hardver je... pa hardver je nesto sto mozes sutati
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.co.yu.



+9 Profil

icon Re: Pozivanje virtuelnih funkcija iz konstruktora bazne klase27.12.2006. u 14:19 - pre 210 meseci
Ipak, ono što sam ti pomenuo da uradiš nije moguće, tako da ti ostaje da na drugi način promeniš implementaciju.
 
Odgovor na temu

1jedini
Dejan Milosavljevic
BG

Član broj: 102721
Poruke: 74
212.200.120.*



Profil

icon Re: Pozivanje virtuelnih funkcija iz konstruktora bazne klase27.12.2006. u 16:18 - pre 210 meseci
ISO 14882 kaze:

10.4.6:
Member functions can be called from a constructor (or destructor) of an abstract class; the effect of making
a virtual call (10.3) to a pure virtual function directly or indirectly for the object being created (or
destroyed) from such a constructor (or destructor) is undefined.

12.7.3
Member functions, including virtual functions (10.3), can be called during construction or destruction
(12.6.2). When a virtual function is called directly or indirectly from a constructor (including from the
mem-initializer for a data member) or from a destructor, and the object to which the call applies is the
object under construction or destruction, the function called is the one defined in the constructor or
destructor’s own class or in one of its bases, but not a function overriding it in a class derived from the constructor
or destructor’s class, or overriding it in one of the other base classes of the most derived object (1.8).

If the virtual function call uses an explicit class member access (5.2.5) and the object-expression
refers to the object under construction or destruction but its type is neither the constructor or destructor’s
own class or one of its bases, the result of the call is undefined. [Example:
Code:

class V {
 public:
  virtual void f();
  virtual void g();
 };

class A : public virtual V {
 public:
  virtual void f();
 };
class B : public virtual V {
 public:
  virtual void g();
  B(V*, A*);
};
class D : public A, B {
 public:
  virtual void f();
  virtual void g();
  D() : B((A*)this, this) { }
};
 B::B(V* v, A* a) 
 {
  f(); //calls V::f, not A::f
  g(); //calls B::g, not D::g
  v->g(); // v is base of B, the call is well-defined, calls B::g
  a->f(); //undefined behavior, a’s type not a base of B
 }

—end example]

AKA DDMM
 
Odgovor na temu

Mirko Rajkovača
Subotica

Član broj: 18458
Poruke: 119
*.com
Via: [es] mailing liste



Profil

icon Re: Pozivanje virtuelnih funkcija iz konstruktora bazne klase27.12.2006. u 17:50 - pre 210 meseci
Hvala vam svima na trudu, uspeo sam da resim problem momentalno zurim pa
nemam vremena da objasnim
Razlika izmedju softvera i hardvera je:
Softver je nesto sto mozes psovati, a hardver je... pa hardver je nesto sto mozes sutati
 
Odgovor na temu

[es] :: C/C++ programiranje :: Pozivanje virtuelnih funkcija iz konstruktora bazne klase

[ Pregleda: 4478 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.