Definicja stałej wewnątrz klasy
Ostatnio zmodyfikowano 2013-03-19 08:48
| maze Temat założony przez niniejszego użytkownika | Definicja stałej wewnątrz klasy » 2013-03-16 23:31:39 Hej, mam pytanie do was. Tak wyglada naglowek mojej klasy: #pragma onceclass Tablica
 {
 double * tab;
 double srd;
 char nazwa[ rozm ];
 int n;
 
 
 public:
 
 Tablica( int = 3 );
 ~Tablica() { ilosc--; };
 
 void wypelnij();
 void wyzeruj();
 void wyswietl( int, int );
 void insert_sort();
 void srednia();
 int rozmiar() { return n; };
 double * adres() { return tab; };
 size_t ilosc_bajtow();
 
 static int ilosc;
 static const int rozm = 15;
 };
 
Na gorze zdeklarowalem tablice nazwa[] ktorej chce nadac staly rozmiar. Myslalem ze bede mogl to zrobic za pomoca stalej statycznej jak zrobilem na dole >>  static const int rozm = 15;  Niestety kompilator nie akcjeptuje mi tego.  Jak moge to zrobic? | 
|  | 
| Monika90 | » 2013-03-17 06:49:46 przenieś  static const int rozm = 15;  przed  char nazwa[ rozm ]; Poza tym, w C++ nie ma czegoś takiego jak  #pragma once . Używanie  size_t  wymaga  #include <cstddef> , no i powinno to być  std::size_t . Nie widzę deklaracji konstruktora kopiującego, ani operatora przypisania, więc Twoja klasa jest prawie na pewno błędna. | 
|  | 
| pekfos | » 2013-03-17 13:01:10 | Poza tym, w C++ nie ma czegoś takiego jak #pragma once. | 
 Jest. | 
|  | 
| usmiech | » 2013-03-18 21:59:29 Nie ma czegos takiego jak #pragma once ? ciekawe :)A nawiasem mowiac maze /chociaz tez dopiero sie ucze/ moim zdaniem traktujesz klase jak obiekt, a klasy to jakby 'definicja' obiektow.
 Klasa ma opisywac grupe obiektow, a nie okreslac konkretne wartosci.. Takie ukonkretnienia stosujesz w obiektach wprowadzanych do klasy.Ciekawa jest tez rola zmiennych globalnych, ale to wszystko to temat 'morze'. Pozdrawiam :)
 | 
|  | 
| Monika90 | » 2013-03-19 07:55:41 #pragma once  jest niestandardowa, jest tylko w niektórych kompilatorach i ma przenośną alternatywę, jaką są include guards. | 
|  | 
| Mrovqa | » 2013-03-19 08:48:36 Musisz definicję zmiennej statycznej umieścić poza klasą i nie może to być w nagłówku, bo jeśli wtedy inkludujesz ten plik wiele razy, to będziesz miał wiele tych zmiennych (linker wyrzuci błąd redefinicji). Klasa.h #pragma once
 class Klasa
 {
 public:
 static const int rozm;
 }
Klasa.cpp #include "Klasa.h"const int Klasa::rozm = 15;
 
I druga uwaga (ktoś wyżej już wspominał): jeżeli klasa sama sobie alokuje pamięć dla wskaźnika, to zaleca się zdefiniowanie konstruktora kopiującego, operatora przypisania oraz destruktora. W przeciwnym wypadku przypisanie obiektu spowoduje tylko przepisanie adresu (a nie zaalokowanie nowej tablicy) i destruktor nie zwolni pamięci - memory leak. | 
|  | 
| « 1 » |