User Tools

Site Tools


cpp:acccess_modifiers

Προσδιοριστές Πρόσβασης

Οι προσδιοριστές πρόσβασης επιτρέπουν την απόκρυψη της πληροφορίας που είναι από τις βασικές αρχές του αντικειμενοστραφή προγραμματισμού. Με την έννοια “απόκρυψη πληροφορίας” εννοούμε την απόκρυψη της εσωτερικής υλοποίησης της κλάσης.

Σε μία κλάση μπορούν να οριστούν οι προσδιοριστές πρόσβασης public, protected και private. Οι προσδιοριστές πρόσβασης αφορούν τόσο τα πεδία (μεταβλητές) όσο και τις συναρτήσεις (μεθόδους) της κλάσης. Η λειτουργικότητα τους συνοψίζεται στα εξής:

  1. public: Ένα μέλος της κλάσης που δηλώνεται ως public είναι προσβάσιμο από οποιαδήποτε άλλη κλάση ή συνάρτηση που δεν ανήκει σε κλάση.
  2. protected: Ένα μέλος της κλάσης που δηλώνεται ως protected είναι προσβάσιμο από την κλάση στην οποια δηλώνεται και από τις υποκλάσεις αυτής, καθώς και από τις φιλικές συναρτήσεις (friend functions) της κλάσης.
  3. private: Ένα μέλος της κλάσης που δηλώνεται ως private είναι προσβάσιμο μόνο από την κλάση στην οποία δηλώνεται και από τις φιλικές συναρτήσεις (friend functions) της κλάσης.

Εάν δεν οριστεί προσδιοριστής πρόσβασης σε μία κλάση τα πεδία και οι μέθοδοι της κλάσης ορίζονται ως private.

Παράδειγμα χρήσης προσδιοριστών πρόσβασης

Δείτε το παρακάτω παράδειγμα χρήσης των προσδιοριστών πρόσβασης μέσω των κλάσεων Cuboid (κυβοειδές) και Cube (κύβος) που κληρονομεί την κλάση Cuboid.

Cuboid.hpp
#include <iostream>
using namespace std;
 
class Cuboid {
  private:
    int width, height, length;
  protected:
    int color;
  public:
    int borderWidth;
  public:
    Cuboid(int w, int h, int l);
    void setWidth(int w);
    void setHeight(int h);
    void setLength(int l);
    int getWidth();
    int getHeight();
    int getLength();
};
 
Cuboid::Cuboid(int w, int h, int l) {
  width = w; height = h; length = l;
  color = 0xffffff;
}
 
void Cuboid::setWidth(int w) { width = w; }
void Cuboid::setHeight(int h) { height = h; }
void Cuboid::setLength(int l) { length = l; }
int Cuboid::getWidth() { return width; }
int Cuboid::getHeight() { return height; }
int Cuboid::getLength() { return length; }
Cube.hpp
#include <iostream>
using namespace std;
#include "Cuboid.hpp"
 
class Cube:Cuboid {  // Cube extends Cuboid  
  public:
    Cube(int s, int updatecolor);
    void setSize(int s);
};
 
Cube::Cube(int s, int updatecolor) : Cuboid(s,s,s) {
  color = updatecolor;
}
 
void Cube::setSize(int s) {
  setWidth(s);
  //width = s; // this does not compile
  setHeight(s);
  setLength(s);
}

Η δήλωση

class Cube:Cuboid {

δηλώνει ότι τη σχέση κληρονομικότητας μεταξύ των κλάσεων Cube και Cuboid (η κλάση Cube είναι απόγονος της κλάσης Cuboid).

CubeUsage.cpp
#include "Cube.hpp"
 
int main() {
  Cuboid cuboid(1,2,3);
  //cuboid.color = 0xFF0000 // this does not compile
  cuboid.borderWidth = 5;
 
  Cube cube(1, 0xcccccc);
  cuboid.setWidth(5);
}

Από το παραπάνω παράδειγμα παρατηρούμε τα εξής:

  1. Τα πεδία width, height και length της κλάσης Cuboid είναι ορισμένα ως private και δεν είναι ορατά από τη συνάρτηση main ή την κλάση Cube.
  2. Το πεδίο color είναι ορισμένο ως protected και είναι ορατό από την υποκλάση Cube, όχι όμως και από τη main.
  3. Η μέθοδος setWidth είναι ορισμένη ως public και είναι ορατή από τη μέθοδο main και από την υποκλάση Cube. Το ίδιο ισχύει και για το public πεδίο borderWidth.
cpp/acccess_modifiers.txt · Last modified: 2021/05/18 06:37 (external edit)