User Tools

Site Tools


cpp:static_members

Στατικά μέλη της κλάσης

Σε αναλογία με τη Java μία κλάση μπορεί να έχει στατικά μέλη, πεδία και μεθόδους. Κάθε στατικό πεδίο αποτελεί μεταβλητή της κλάσης (class variable), διότι η μεταβλητή είναι κοινή για το σύνολο των αντικειμένων της κλάσης. Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε ένα στατικό πεδίο για να μετρήσουμε τον αριθμό των αντικειμένων της κλάσης που έχουν δημιουργηθεί. Δείτε το παρακάτω παράδειγμα για την κλάση Rectangle.

RectangleWithStaticMember.cpp
#include <iostream>
using namespace std;
 
class Rectangle {
  private:
    int width, height;
  public:
    static int rectangles;
 
    Rectangle(int w, int h);
    Rectangle(int s);
    int getWidth() const;
    int getHeight() const;
    void setWidth(int w);
    void setHeight(int h);
    static int getRectanglesNumber();
};
 
int Rectangle::rectangles = 0;
 
Rectangle::Rectangle(int w, int h) {
  width = w; height = h;
  rectangles++;
}
 
Rectangle::Rectangle(int s) {
  width = height = s;
  rectangles++;
}
 
int Rectangle::getWidth() const { return width;}
int Rectangle::getHeight() const { return height;}
void Rectangle::setWidth(int w) { width = w; }
void Rectangle::setHeight(int h) { height = h; }
 
static int getRectanglesNumber() {
  //width++; // this is not allowed.
  return Rectangle::rectangles;
}
 
int main() {
  Rectangle rect1(3,4);
  Rectangle rect2(5);
  cout << "Number of rectangles is " << getRectanglesNumber() << endl;
  cout << "Number of rectangles is " << Rectangle::rectangles << endl;
  cout << "Number of rectangles is " << rect1.rectangles << endl;
}

Στον παραπάνω κώδικα παρατηρούμε το εξής:

  1. Η αρχικοποίηση της στατικής μεταβλητής γίνεται έξω από την κλάση. Η αρχικοποίηση εκτός της κλάσης (όπως παραπάνω) είναι υποχρεωτική. Για το λόγο αυτό η στατική μεταβλητή είναι αναγκαίο να δηλωθεί ως public.
  2. Η πρόσβαση στα στατικά πεδία της κλάσης μπορεί να γίνει με τους εξής τρόπους
    1. Με χρήση του ονόματος της κλάσης: Rectangles::rectangles.
    2. Με χρήση ενός υφιστάμενου αντικειμένου, τελεία, το όνομα του πεδίου: rect1.rectangles.
  3. Η στατική μέθοδος static int getRectanglesNumber() έχει απευθείας πρόσβαση στα στατικά πεδία της κλάσης, αλλά δεν έχει πρόσβαση στα μη στατικά πεδία και στον δείκτη this.
cpp/static_members.txt · Last modified: 2017/05/09 19:32 (external edit)