Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Dacia 1316 cu 6 usi ...

Frecventa modificata radio

Un nou pericol pt batrani

Ar trebuii sa vindem imobiliarele...
 Dupa renuntarea la aparat dentar

pelerinaj in Balcik

Noul format Jpegli iși propu...

Dade, dade
 Parola la lock screen

Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...

Merita un Termostat Smart pentru ...
 Sfat achizitie MTB Devron Riddle

Problema mare cu parintii= nervi ...

switch microtik

Permis categoria B la 17 ani
 

Inheritance

- - - - -
  • Please log in to reply
4 replies to this topic

#1
ygrec25

ygrec25

    Junior Member

  • Grup: Members
  • Posts: 25
  • Înscris: 25.06.2012
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(B) {}
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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
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
Isaak

Isaak

    Member

  • Grup: Members
  • Posts: 459
  • Înscris: 08.06.2011
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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
Acel B e defapt b, dar forumul il face mare daca-l pui intre ( )

#5
ygrec25

ygrec25

    Junior Member

  • Grup: Members
  • Posts: 25
  • Înscris: 25.06.2012

View Postdani.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.

View PostIsaak, 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

Chirurgia spinală minim invazivă 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate