2012-06-03 18 views
8

Estoy aprendiendo conceptos básicos de OOP en C++ y me encontré con un problema lógico.Lógica de programación orientada a objetos

#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(); 
} 

lo que quería saber en el código anterior por qué estoy acceder a la x.i [Línea 19], que es un miembro privado en los diferentes object.Isn't el ámbito privado restringido a la misma clase, incluso si el objeto se pasa como un parámetro?

+1

Piensa en cuán fea sería una tarea tan común como tu ejemplo si no estuviera permitida. El objetivo de 'private' no es restringir el acceso desde _objects_" foráneos ", sino encapsular _code_. Y el código de una clase nunca se preocupa realmente por ningún objeto en particular, excepto por el puntero 'this' que se pasa implícitamente a cada función miembro no estática. – leftaroundabout

Respuesta

13

private en C++ significa privado a la clase, no privada al objeto. Ambas interpretaciones son posibles, de hecho algunas lenguas eligen la otra. Pero la mayoría de los lenguajes son como C++ en esto y permiten que los objetos de la misma clase accedan a los miembros privados de otra instancia.

0

cpy(A x) es un miembro de la clase, puede acceder a private campos y métodos.

La palabra clave private limita las entradas de otras clases (objetos) para acceder a los campos. Cualquier código que pertenece a una clase puede acceder a sus propios miembros privados (campos o métodos).

+1

La pregunta es por qué puede acceder al campo privado en el objeto x suministrado. No es el mismo objeto, incluso si es la misma clase. –

0

Una clase puede acceder a sus propios miembros de datos privados.

Esto también significa que si tiene cualquiera de las funciones que tienen que ver con dos o más instancias (this y algo pasado como parámetro) se puede acceder a tanto de objetos privados (y públicos) variables/métodos

+0

La pregunta es por qué puede acceder al campo privado en el objeto x suministrado. No es el mismo objeto, incluso si es la misma clase. –

+0

@Truth mi respuesta ya lo dice muy claramente ... De hecho, fue el primero en hacerlo – Raekye

5

variables x y y son dos instancias de la misma clase. Son objetos diferentes pero pertenecen a la misma clase . Es por eso que es posible acceder al miembro privado desde la función miembro.

0

¿El alcance privado no está restringido a la misma clase, incluso si el objeto se pasa como parámetro?

Sí, esto es lo que ha sucedido x está accediendo al miembro privado i en la misma clase es decir en la clase Un.

2

Una propiedad privada o método de una clase significa que no se puede acceder directamente desde fuera del alcance de la clase. Para eso, los métodos públicos se definen dentro de una clase a través de la cual podemos acceder y manipular el valor de los miembros privados.

En el ejemplo anterior no está accediendo directamente al objeto 'i' sino que lo está manipulando a través de un método público.

Piénselo de esta manera: usted tiene una cuenta bancaria y su dinero en el banco es un miembro privado. No puede ir directamente al banco y tomar su dinero usted mismo. El cajero en el banco es como un método público que puede acceder a la propiedad privada, es decir, su dinero, y puede manipular su dinero a través del cajero.

Cuestiones relacionadas