nie wie ktoś jak się dostać do wartości zmiennej przez wskaźnik z klasy abstrakcyjnej tak jak jest to z metodami np "wsk->wypisz()" to jak dostać się do zmiennej takiego obiektu?

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
2
Dokładnie w ten sam sposób, tylko weź pod uwagę że widzisz tylko zmienne należące do tejże klasy a nie do jej potomków i że "z zewnątrz" widzisz tylko publiczne pola.
edytowany 1x, ostatnio: Shalom

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
0
Gadasz jakieś bzdury. Pokaż kompletny kod który nie działa. Bo teraz nie wiadomo czym są Kot, Pies i Zwierze i czym jest x
. Daj kawałek kodu który można skompilować i uruchomić.
edytowany 1x, ostatnio: Shalom
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 7 lat
- Postów:3
0
#include "stdafx.h"
using namespace std;
class Zwierze
{
public:
int x;
virtual void wczytaj() = 0;
};
class Kot :public Zwierze
{
public:
int x;
virtual void wczytaj()
{
cin >> x;
}
};
int main()
{
Zwierze *wsk;
Kot k1;
wsk = &k1;
wsk->wczytaj();
cout << k1.x << endl; <---------- takie użycie zmiennej działa
cout << wsk->x << endl; <---------- i chodzi mi o to czy dz się pokazać ją za pomocą wskaźnika
getchar();
return 0;
}
edytowany 1x, ostatnio: Shalom

- Rejestracja:prawie 9 lat
- Ostatnio:około 5 lat
- Lokalizacja:Pabianice
0
#include <iostream>
class Animal
{
protected:
int x;
public:
Animal(int x) : x{ x } {}
virtual void Show() = 0;
};
class Dog :public Animal
{
public:
Dog(int x) : Animal(x) {}
virtual void Show() { std::cout << "Dog: " << this->x << '\n'; }
};
int main()
{
Animal* dog = new Dog(1);
dog->Show();
Animal* animal;
Dog dog2(2);
animal = &dog2;
animal->Show();
}
- Rejestracja:ponad 12 lat
- Ostatnio:ponad 4 lata
- Postów:21
1
nadpisujesz definicję zmiennej x w klasie "Kot"... aby rozwiązać problem usuń drugą definicję w klasie "Kot"... a tamta cyfra to nie adres a nie zainicjowana zmienna "losowa" z pamięci...
edytowany 1x, ostatnio: zegarek84
masiu
dzięki wielkie za pomoc w rozwiązaniu problemu teraz wszystko działa jak należy
zegarek84
z przesłonięciem zmiennych można wykonać kilka ciekawych tricków, podobnie jak ze wskaźnikami na obiekt a definicja wskaźnika wskazuje na jakiegoś przodka obiektu (inaczej działają funkcje wirtualne, gdzie nie ważne jak jest zdefiniowany wskaźnik na obiekt)... i tu np. inne rozwiązanie to wczytanie cyfry do zmiennej tymczasowej po czym wykonanie np. takiego kodu:
Zwierze::x = x = tmp;
gdzie sam x to tak jakbyś napisał this->x... i podobnie jest z wywoływaniem funkcji nie wirtualnych ;] - przy wirtualnych będzie wywołana ta funkcja, z której klasy powstała