Wskaźnik polimorficzny, a dostęp do atrybutów klasy

Odpowiedz Nowy wątek
2018-06-12 16:39
0

Witam. Mam do Was takie pytanie: czy używając wskaźnika polimorficznego, odnoszę się do atrybutu klasy wirtualnej, czy dziedziczącej? Chodzi mi o taką sytuację: w pewnej klasie mam kilka prywatnych atrybutów, deklaruję je jako wirtualne i ustawiam na zero. Z tej klasy dziedziczy kilka innych, w których te atrybuty zostają zasłonięte. Wiem, że pytanie może wydawać się głupie, ale wolę zadać je teraz niż potem szukać ewentualnych błędów. Czy działa to tak samo, jak dla metod? Dostęp z zewnątrz byłby realizowany dzięki deklaracji przyjaźni (czy może lepiej zostać przy setterach i getterach?).

najlepiej pokaż na kodzie o co ci chodzi. Co rozumiesz przez "atrybut"? Pole klasy, parę metod set/get<coś>, pole statyczne? - MarekR22 2018-06-12 17:26

Pozostało 580 znaków

2018-06-12 17:27
1

Pytanie dotyczy C++ czy C#? Jesli C++ to pokaz kod, bo nie wiem co to "atrybut klasy", "deklaruje jako wirtualne" w kontekscie C++.

Pozostało 580 znaków

2018-06-12 17:33
0

Jeszcze nie mam kodu, przestawiona sytuacja jest czysto teoretyczna. Poprzez atrybut rozumiem pole klasy. Język to C++.

Pozostało 580 znaków

2018-06-12 17:37
0

Z tej klasy dziedziczy kilka innych, w których te atrybuty zostają zasłonięte

Chodziło chyba o nadpisane (overridden), a nie przysłonięte (shadowed).


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Racja, mój błąd - kst142 2018-06-12 17:40

Pozostało 580 znaków

2018-06-12 18:46
0
#include <iostream>
using namespace std;
 
class Base
{
public:
    int getX() { return x; }
protected:
    int x = 0;
};
 
class Derived : public Base
{
public:
    Derived() { x = -5; }  
};
 
int main()
{
    Base* ptr = new Base();
    cout << ptr->getX() << endl;
    delete ptr;
 
    ptr = new Derived();
    cout << ptr->getX() << endl;
    delete ptr;
}
0
-5

O to chodzi?

a gdzie tu masz polimorfizm? - MarekR22 2018-06-13 09:12
Polimorfizm czego? Pola? - twonek 2018-06-13 11:25

Pozostało 580 znaków

2018-06-13 09:44
0

No tak nie do końca. Już wiem, jak sformułować pytanie: czy pola (zmienne) klasy abstrakcyjnej mogą być wirtualne/czysto wirtualne?

Pozostało 580 znaków

2018-06-13 09:55
2018-06-13 10:57
kq
0

Jak taka wirtualność miałaby się objawiać?


Pozostało 580 znaków

2018-06-13 10:59
0

Dzięki deklaracji przyjaźni z klasami potomnymi nie musiałbym tworzyć setterów i getterów. Dostęp miałby odbywać się bezpośrednio przez wskaźnik polimorficzny.

jak takie cos musisz tworzyc to zapewnie masz problem z architektura - fasadin 2018-06-13 11:01

Pozostało 580 znaków

2018-06-13 11:00
kq
0

Może czegoś nie rozumiem, ale tak działają zwykłe zmienne.


Pozostało 580 znaków

2018-06-13 11:04
0

Czyli gdybym zadeklarował jakieś zmienne w klasie bazowej, a potem nadpisał je w klasach potomnych, to rozumiem, że poprzez wskaźnik polimorficzny uzyskam dostęp do tej zmiennej klasy pochodnej?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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