2012-06-03 21 views
8

Poznaję podstawowe pojęcia OOP w C++ i natknąłem się na logiczny problem.Logika programowania obiektowego

#include <iostream> 
#include <conio.h> 

using namespace std; 

class A { 
    int i; 
public: 
    void set(int x) { 
     i=x; 
    } 
    int get() { 
     return i; 
    } 
    void cpy(A x) { 
     i=x.i; 
    } 
}; 

int main() 
{ 
    A x, y; 
    x.set(10); 
    y.set(20); 

    cout << x.get() << "\t" << y.get() << endl; 
    x.cpy(y); 
    cout << x.get() << "\t" << y.get() << endl; 
    getch(); 
} 

Chciałem wiedzieć, w powyższym kodzie Dlaczego jestem w stanie uzyskać dostęp x.i [Linia 19], przy czym członek prywatny w różnych object.Isn't zakres prywatny ograniczony do tej samej klasy, nawet jeśli obiekt jest przekazywany jako parametr?

+1

Pomyśl, jak brzydkie byłoby takie typowe zadanie, jak na przykład, gdyby nie było dozwolone. Punkt 'private' nie ogranicza dostępu do" obcych "_objects_, lecz do enkapsulacji _code_. Kod w klasie nigdy nie zajmuje się żadnym konkretnym obiektem, z wyjątkiem "tego" wskaźnika, który jest niejawnie przekazywany do każdej niestatycznej funkcji składowej. – leftaroundabout

Odpowiedz

13

private w C++ oznacza prywatny do klasy nie prywatny do obiektu. Obie interpretacje są możliwe, a niektóre języki wybrały inne. Ale większość języków jest podobna do C++ i pozwala obiektom tej samej klasy na dostęp do prywatnych członków innej instancji.

0

cpy(A x) jest członkiem klasy, może uzyskać dostęp do pól i metod private.

Słowo kluczowe private ogranicza intencje innych klas (obiektów) w celu uzyskania dostępu do pól. Każdy kod należący do klasy może uzyskać dostęp do swoich prywatnych członków (pól lub metod).

+1

Pytanie brzmi, dlaczego może uzyskać dostęp do pola prywatnego na dostarczonym obiekcie x. To nie jest ten sam obiekt, nawet jeśli jest to ta sama klasa. –

0

Klasa może uzyskać dostęp do własnych prywatnych członków danych.

Oznacza to również, jeśli masz jakieś funkcje, które wykonują dwie lub więcej instancji (this i coś przekazanym jako parametr) można uzyskać dostęp zarówno obiektu prywatnych (i publicznych) zmiennych/metod

+0

Pytanie brzmi, dlaczego może uzyskać dostęp do pola prywatnego na dostarczonym obiekcie x. To nie jest ten sam obiekt, nawet jeśli jest to ta sama klasa. –

+0

@ Truth moja odpowiedź już stwierdza, że ​​bardzo wyraźnie ... W rzeczywistości była to pierwsza – Raekye

5

Zmienne x i y są dwoma wystąpieniami tej samej klasy. Są to różne obiekty, ale należą one do tej samej klasy. Dlatego jest możliwe uzyskanie dostępu do prywatnego członka z funkcji członka.

0

Czy zasięg prywatny nie jest ograniczony do tej samej klasy, nawet jeśli obiekt jest przekazywany jako parametr?

Tak, to jest to, co działo się x uzyskuje dostęp do prywatnego członek i w tej samej klasie I.E w klasie .

2

Własność prywatna lub metoda klasy oznacza, że ​​nie jest dostępna bezpośrednio spoza zakresu klasy. W tym przypadku publiczne metody są definiowane wewnątrz klasy, przez którą możemy uzyskać dostęp i manipulować wartością prywatnych członków.

W powyższym przykładzie nie można bezpośrednio uzyskać dostępu do obiektu 'i', a raczej manipulować nim za pomocą metody publicznej.

Pomyśl o tym w następujący sposób: Masz konto bankowe, a Twoje pieniądze w banku są członkami prywatnymi. Nie możesz po prostu pójść bezpośrednio do banku i zabrać własnych pieniędzy. Kasjer w banku jest jak publiczna metoda, która może uzyskać dostęp do własności prywatnej, tj. Twoich pieniędzy, i możesz manipulować swoimi pieniędzmi za pośrednictwem kasjera.