User Tools

Site Tools


cpp:acccess_modifiers

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
cpp:acccess_modifiers [2017/04/20 14:11] 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//. Δείτε το παρακάτω παράδειγμα χρήσης των προσδιοριστών πρόσβασης μέσω των κλάσεων //Cuboid// (κυβοειδές) και //Cube// (κύβος) που κληρονομεί την κλάση //Cuboid//.
  
-<code cpp Cuboid.cpp>+<code cpp Cuboid.hpp>
 #include <iostream> #include <iostream>
 using namespace std; using namespace std;
Line 19: Line 24:
   protected:   protected:
     int color;     int color;
 +  public:
 +    int borderWidth;
   public:   public:
     Cuboid(int w, int h, int l);     Cuboid(int w, int h, int l);
Line 42: Line 49:
 </code> </code>
  
-<code cpp Cube.cpp>+<code cpp Cube.hpp>
 #include <iostream> #include <iostream>
 using namespace std; using namespace std;
-#include "Cuboid.cpp"+#include "Cuboid.hpp"
  
 class Cube:Cuboid {  // Cube extends Cuboid   class Cube:Cuboid {  // Cube extends Cuboid  
   public:   public:
     Cube(int s, int updatecolor);     Cube(int s, int updatecolor);
 +    void setSize(int s);
 }; };
  
 Cube::Cube(int s, int updatecolor) : Cuboid(s,s,s) { Cube::Cube(int s, int updatecolor) : Cuboid(s,s,s) {
   color = updatecolor;   color = updatecolor;
 +}
 +
 +void Cube::setSize(int s) {
 +  setWidth(s);
 +  //width = s; // this does not compile
 +  setHeight(s);
 +  setLength(s);
 } }
 </code> </code>
  
 +Η δήλωση <code>class Cube:Cuboid {</code> δηλώνει ότι τη σχέση κληρονομικότητας μεταξύ των κλάσεων Cube και Cuboid (η κλάση Cube είναι απόγονος της κλάσης Cuboid).
  
 <code cpp CubeUsage.cpp> <code cpp CubeUsage.cpp>
-include "Cube.cpp"+#include "Cube.hpp"
  
 int main() { int main() {
   Cuboid cuboid(1,2,3);   Cuboid cuboid(1,2,3);
 +  //cuboid.color = 0xFF0000 // this does not compile
 +  cuboid.borderWidth = 5;
 +  
   Cube cube(1, 0xcccccc);   Cube cube(1, 0xcccccc);
 +  cuboid.setWidth(5);
 } }
 </code> </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.1492697515.txt.gz · Last modified: 2017/04/20 13:11 (external edit)