Chirurgia spinală minim invazivă
Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical. Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale. www.neurohope.ro |
Inheritance
Last Updated: Apr 19 2014 19:22, Started by
ygrec25
, Apr 19 2014 15:57
·
0
#1
Posted 19 April 2014 - 15:57
Salut! Am o problema cu o clasa. Vreau ca B sa mosteneasca tot ce este "public" in clasa A(constructorul si operatorii). Urmatorul cod imi da mai multe erori.
#include <iostream> class A { int a; public: A(int b = 0): a( {} friend A operator+(const A& obj1, const A& obj2) { return A(obj1.a + obj2.a); } friend A operator-(const A& obj1, const A& obj2) { return A(obj1.a - obj2.a); } friend std::ostream& operator<<(std::ostream& out, const A& obj) { out<<"a = "<<obj.a; return out; } }; class B: public A { int b; }; int main() { A a1(5), a2(4), a; B b1(7), b2(5), b; // de aici incep erorile a = a1 - a2; b = b1 - b2; std::cout<<a<<"\n"; std::cout<<b<<"\n"; a = a1 + a2; b = b1 + b2; std::cout<<a<<"\n"; std::cout<<b<<"\n"; } Imi puteti da niste sugestii? |
#2
Posted 19 April 2014 - 16:00
N-ai definit nici un constructor pentru B care sa accepte un int.
N-ai nevoie de friend decat la operator<< b1 - b2 returneaza un A, pe care nu-l poti asocia unui B |
#3
Posted 19 April 2014 - 17:07
A(int b = 0): a ( B ) { }
Asta e prima greseala care-mi sare in ochi. Cine e "B" in momentul asta? Clasa B e definita mai jos, nici nu o cunoaste in momentul asta.Probabil ai vrut sa scrii "b"... Deci: toate erorile alea care-ti apar, apar din cauza ca ai incalcat o regula de baza a C++ : constructorii, destructorii, operatorul de atribuire si prietenii NU se mostenesc. Constructorii/destructorii si operatorul de atribuire nu se mostenesc din cauza ca, clasa derivata poate avea (si aproape sigur are) noi membri, deci in felul asta nu s-ar executa corect atribuirea, creare/distrugerea obiectelor clasei derivate, iar prietenii nu se mostenesc din cauza ca nu sint functii membre ale claselor, ele doar au acces la datele private ale clasei in care sint definite. Edited by Isaak, 19 April 2014 - 17:07. |
#4
Posted 19 April 2014 - 17:30
Acel B e defapt b, dar forumul il face mare daca-l pui intre ( )
|
#5
Posted 19 April 2014 - 19:22
dani.user, on 19 aprilie 2014 - 16:00, said:
N-ai nevoie de friend decat la operator<< Daca "operator-" si "operator+" nu au friend imi da din nou o eroare. Isaak, on 19 aprilie 2014 - 17:07, said:
Deci: toate erorile alea care-ti apar, apar din cauza ca ai incalcat o regula de baza a C++ : constructorii, destructorii, operatorul de atribuire si prietenii NU se mostenesc. Deci trebuie sa rescriu din nou operatorii. Multumesc pentru raspunsuri! |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users