Konstruktor a zmienna prywatna

0

Witam

Czy można wypisać zmienną ustawioną wcześniej przez konstruktor gdy ta zmienna jest prywatna? Wypisuje mi ‘int Person::age’ is private within this context. Gdy ustawie te zmienną jako publiczną to już wszystko działa dobrze.

#include <iostream>
using namespace std;

class Person {
private:
    int age;
    string name;
public:
    Person(int InitialAge);
    ~Person();
    int getAge() { return age; }
    void setAge(int a) { age = a; }
    string getName() { return name; }
    void setName(string n) { name = n; }
};

Person::Person(int initialAge)
{
    age = initialAge;
}

Person::~Person()
{
}

int main()
{
    Person John(20);
    cout << John.age;
}

3
cout << John.getAge()

A teraz idź i nie wracaj bez rodziców :P

4

To jest zmienna prywatna, widoczna jest w metodach, ale nie z zewnątrz. Masz przecież getAge() - czemu jej nie użyć?

0

A w konstruktorze można też użyć metody setAge, skoro już jest...

0

@up i komentarza twonka - to... zależy. ;)

Generalnie, wolałbym listę inicjalizacyjną, ale z drugiej strony: jeżeli pewna wartość musi być na wstępie skontrolowana i w razie potrzeby zmodyfikowana, a jest to proces na tyle rozwlekły, że wsadzenie go prosto w ciało konstruktora razem z podobnymi fragmentami dla innych zmiennych prywatnych/parametrów nadmucha jego rozmiar, to utworzenie setterów nie będzie wcale złym pomysłem.*
Tylko teraz pytanie - czy potrzebujemy, żeby te settery były publiczne? Niekoniecznie. Wręcz namawiałbym, żeby tworzyć klasy pozbawione publicznych setterów o ile to tylko ma sens w danym przypadku.


*) Co nie znaczy, że nie można połączyć obydwu rozwiązań. Można te settery - a raczej już "weryfikatory"/"korektory" czy jak tam je zwał - zawołać w liście inicjalizacyjnej, jeżeli będziemy z nich zwracać "poprawioną" wartość, co może być konieczne jeżeli nie możemy uniknąć listy na przykład ze względu na brak domyślnego konstruktora, lub nie chcemy jej uniknąć ze względu na to, że domyślny konstruktor jest "ciężki".

1 użytkowników online, w tym zalogowanych: 0, gości: 1