fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Student {
  6. string im, naz;
  7. double oc;
  8.  
  9. public:
  10. Student()
  11. : im("0")
  12. , naz("0")
  13. , oc(0)
  14. {
  15. }
  16. Student(string name, string surname, double year)
  17. : im(name)
  18. , naz(surname)
  19. , oc(year)
  20. {
  21. }
  22. string& imie() { return im; }
  23. const string& imie() const { return im; }
  24. string& nazwisko() { return naz; }
  25. const string& nazwisko() const { return naz; }
  26. double& ocena() { return oc; }
  27. const double& ocena() const { return oc; }
  28. friend ostream& operator<<(ostream& out, const Student& ob);
  29. };
  30. ostream& operator<<(ostream& out, const Student& ob)
  31. {
  32. out << ob.im << " " << ob.naz << " " << ob.oc << endl;
  33. return out;
  34. }
  35. class Grupa {
  36. unsigned rozmiar;
  37. Student* studenci;
  38.  
  39. public:
  40. Grupa()
  41. : rozmiar(0)
  42. , studenci(new Student){};
  43. Grupa(const Student* pocz, const Student* kon)
  44. : rozmiar(kon - pocz)
  45. , studenci(rozmiar ? new Student[rozmiar] : 0)
  46. {
  47. for (unsigned i = 0; i < rozmiar; i++) {
  48. studenci[i] = pocz[i]; //skad wie zeby tu wszystko przypisac ???
  49. }
  50. }
  51. friend ostream& operator<<(ostream& out, const Grupa& ob);
  52. const double srednia() const; // dwa consty :D
  53. Grupa& operator=(const Grupa& ob);
  54. Student& operator[](unsigned i)
  55. {
  56. return studenci[i];
  57. }
  58. };
  59.  
  60. Grupa& Grupa::operator=(const Grupa& ob)
  61. {
  62. if (this != &ob) {
  63. delete studenci;
  64. rozmiar = ob.rozmiar;
  65. studenci = new Student[rozmiar];
  66. for (unsigned i = 0; i < rozmiar; i++) {
  67. studenci[i] = ob.studenci[i];
  68. }
  69. }
  70. return *this;
  71. }
  72.  
  73. const double Grupa::srednia() const
  74. {
  75. double suma = 0;
  76. for (unsigned i = 0; i < rozmiar; i++) {
  77. suma += studenci[i].ocena(); //metoda dostepowa :D
  78. }
  79. return suma / rozmiar;
  80. }
  81. ostream& operator<<(ostream& out, const Grupa& ob)
  82. {
  83. for (unsigned i = 0; i < ob.rozmiar; i++) {
  84. out << ob.studenci[i];
  85. }
  86. return out;
  87. }
  88. int main()
  89. {
  90. Student bond("James", "Bond", 5.0);
  91. cout << "Student " << bond.imie() << " " << bond.nazwisko();
  92. cout << " dostal " << bond.ocena() << endl;
  93. Student studenci[3] = { Student("Jan", "Kowalski", 3.5),
  94. Student("Ala", "Nowak", 3.0), Student() };
  95. const Grupa gr1(studenci, studenci + 3);
  96. cout << gr1;
  97. cout << "Srednia ocen tej grupy to " << gr1.srednia() << std::endl;
  98. Grupa gr2;
  99. gr2 = gr1;
  100. gr2[2] = bond;
  101. cout << gr2;
  102. cout << "Srednia ocen tej grupy to " << gr2.srednia() << std::endl;
  103. return 0;
  104. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
Student James Bond dostal 5
Jan Kowalski 3.5
Ala Nowak 3
0 0 0
Srednia ocen tej grupy to 2.16667
Jan Kowalski 3.5
Ala Nowak 3
James Bond 5
Srednia ocen tej grupy to 3.83333