User Tools

Site Tools


cpp:acccess_modifiers

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
cpp:acccess_modifiers [2017/04/20 13:24] – created gthanoscpp:acccess_modifiers [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 3: Line 3:
 Οι προσδιοριστές πρόσβασης επιτρέπουν την απόκρυψη της πληροφορίας που είναι από τις βασικές αρχές του αντικειμενοστραφή προγραμματισμού. Με την έννοια //"απόκρυψη πληροφορίας"// εννοούμε την απόκρυψη της εσωτερικής υλοποίησης της κλάσης. Οι προσδιοριστές πρόσβασης επιτρέπουν την απόκρυψη της πληροφορίας που είναι από τις βασικές αρχές του αντικειμενοστραφή προγραμματισμού. Με την έννοια //"απόκρυψη πληροφορίας"// εννοούμε την απόκρυψη της εσωτερικής υλοποίησης της κλάσης.
  
-Σε μία κλάση μπορούν να οριστούν οι προσδιοριστές πρόσβασης //public//, //protected// και //private//. Οι προσδιοριστές πρόσβασης αφορούν τόσο τα πεδία (μεταβλητές) όσο και τις συναρτήσεις (μεθόδους) της κλάσης. Οι λειτουργικότητα τους συνοψίζεται στα εξής:+Σε μία κλάση μπορούν να οριστούν οι προσδιοριστές πρόσβασης //public//, //protected// και //private//. Οι προσδιοριστές πρόσβασης αφορούν τόσο τα πεδία (μεταβλητές) όσο και τις συναρτήσεις (μεθόδους) της κλάσης. Η λειτουργικότητα τους συνοψίζεται στα εξής:
   - **public:** Ένα μέλος της κλάσης που δηλώνεται ως //public// είναι προσβάσιμο από οποιαδήποτε άλλη κλάση ή συνάρτηση που δεν ανήκει σε κλάση.   - **public:** Ένα μέλος της κλάσης που δηλώνεται ως //public// είναι προσβάσιμο από οποιαδήποτε άλλη κλάση ή συνάρτηση που δεν ανήκει σε κλάση.
   - **protected:** Ένα μέλος της κλάσης που δηλώνεται ως //protected// είναι προσβάσιμο από την κλάση στην οποια δηλώνεται και από τις υποκλάσεις αυτής, καθώς και από τις φιλικές συναρτήσεις (//friend functions//) της κλάσης.   - **protected:** Ένα μέλος της κλάσης που δηλώνεται ως //protected// είναι προσβάσιμο από την κλάση στην οποια δηλώνεται και από τις υποκλάσεις αυτής, καθώς και από τις φιλικές συναρτήσεις (//friend functions//) της κλάσης.
   - **private:** Ένα μέλος της κλάσης που δηλώνεται ως //private// είναι προσβάσιμο μόνο από την κλάση στην οποία δηλώνεται και από τις φιλικές συναρτήσεις (//friend functions//) της κλάσης.   - **private:** Ένα μέλος της κλάσης που δηλώνεται ως //private// είναι προσβάσιμο μόνο από την κλάση στην οποία δηλώνεται και από τις φιλικές συναρτήσεις (//friend functions//) της κλάσης.
 +
 +<WRAP tip 80% center round>
 +Εάν δεν οριστεί προσδιοριστής πρόσβασης σε μία κλάση τα πεδία και οι μέθοδοι της κλάσης ορίζονται ως //private//
 +</WRAP>
 +===== Παράδειγμα χρήσης προσδιοριστών πρόσβασης =====
 +
 +Δείτε το παρακάτω παράδειγμα χρήσης των προσδιοριστών πρόσβασης μέσω των κλάσεων //Cuboid// (κυβοειδές) και //Cube// (κύβος) που κληρονομεί την κλάση //Cuboid//.
 +
 +<code cpp 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; }
 +</code>
 +
 +<code cpp 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);
 +}
 +</code>
 +
 +Η δήλωση <code>class Cube:Cuboid {</code> δηλώνει ότι τη σχέση κληρονομικότητας μεταξύ των κλάσεων Cube και Cuboid (η κλάση Cube είναι απόγονος της κλάσης Cuboid).
 +
 +<code cpp 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);
 +}
 +</code>
 +
 +
 +<WRAP center round tip 80%>
 +Από το παραπάνω παράδειγμα παρατηρούμε τα εξής:
 +  - Τα πεδία //width//, //height// και //length// της κλάσης //Cuboid// είναι ορισμένα ως //private// και δεν είναι ορατά από τη συνάρτηση //main// ή την κλάση //Cube//
 +  - Το πεδίο //color// είναι ορισμένο ως //protected// και είναι ορατό από την υποκλάση //Cube//, όχι όμως και από τη //main//.
 +  - Η μέθοδος //setWidth// είναι ορισμένη ως //public// και είναι ορατή από τη μέθοδο //main// και από την υποκλάση //Cube//. Το ίδιο ισχύει και για το //public// πεδίο //borderWidth//.
 +</WRAP>
 +
cpp/acccess_modifiers.1492694653.txt.gz · Last modified: 2017/04/20 12:24 (external edit)