fork download
  1. #include <iostream>
  2.  
  3. class A
  4. {
  5. private:
  6. int a;
  7. public:
  8. A():a(0) {}
  9. void printA() { std::cout << "a privat din A este: " << a << "\n"; }
  10. };
  11.  
  12. class B: public A
  13. {
  14. private:
  15. int b;
  16. public:
  17. B():b(-1) {}
  18. /* o mare prostie, fac cast la inceputul obiectului in memorie si pentru ca il mosteneste pe A, inseamna ca
  19. exista un int in memoria obiectului si il scriu subscriu cu 3 deci int a exista in memoria oricarui obiect de tip B */
  20. void porcarie() { int* a = reinterpret_cast<int*>(this); *a=3; }
  21. void printB() { std::cout << "b privat din B este: " << b << "\n"; }
  22. };
  23.  
  24. int main()
  25. {
  26. //daca sizeof(int) == 4 (32 biti) atunci:
  27. std::cout << sizeof(A) << "\n"; //4
  28. std::cout << sizeof(B) << "\n"; //8, deci avem si int a si int b
  29.  
  30. B b;
  31. b.printA(); // 0
  32. b.printB(); // -1
  33. b.porcarie();
  34. b.printA(); // 3 !!! am modificat variabila privata a clasei A printr-un obiect de tip B
  35. b.printB(); // -1, asta a ramas la fel
  36.  
  37. return 0;
  38. };
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
4
8
a privat din A este: 0
b privat din B este: -1
a privat din A este: 3
b privat din B este: -1