Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Share abonament Netflix

Cum pot sa fac rost de un negativ...

Lant Bicicleta

Un designer artist: Raymond Loewy
 ATS din contactor modular

Parere apartament ~150k

Limitare la 100mb/s

Altercație
 Cartonașe și stickere t...

Ciobanesc german - zgarda electro...

Ce este instalatia asta? (Valea B...

BD-R Verbatim 25gb salvare Fisier
 Lupte WW2

Achizitie SUV, buget 17k euro

Gps traker pentru animale

Aplicatii terte pentru IPTV, OTT,...
 

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,254
  • Î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,254
  • Î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