funkcje abstrakcyjne

funkcje abstrakcyjne
MA
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:3
0

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?

Shalom
  • 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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
MA
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:3
0

Kot kot; Pies pies;
Zwierze *wsk;

wsk = &kot;

cout << wsk->x << endl;

tylko że jak napisze to w ten sposób to wyświetla mi się miejsce w pamięci na którą wskazuje wskaźnik

edytowany 1x, ostatnio: masiu
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ć.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
MA
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 7 lat
  • Postów:3
0
Kopiuj
#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
carlosmay
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Pabianice
0
Kopiuj
#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();
}

Z8
  • 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
MA
dzięki wielkie za pomoc w rozwiązaniu problemu teraz wszystko działa jak należy
Z8
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.