• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyciągnięcie wartości zmiennej protected tablicy[] z klasy

Object Storage Arubacloud
0 głosów
229 wizyt
pytanie zadane 4 listopada 2015 w C i C++ przez Rout Bywalec (2,350 p.)

Witam,
Mój problem polega na tym że mam kalse A gdzie znajduje się tablica która jest w polu protected:
protected:
taba[];

I wartość tej zmiennej chcę użyć w kalsie B która dziedziczy publicznie po klasie A.
Do wyciągniecia zmiennej z klasy A użyłem funkcji:
int losowanie::getzadane_pytania(int x)
{
    return zadane_pytania[x];
}

W programie głównym ("main") jestem w stanie bez problemu uzyskać te wartości ale gdy użyje tej funkcji do wyciągania wartości w klasie B, to otrzymuję losowe wartości. Np. funkcjia getzadane_pytania(3) użyta w main zwróci mi 6 a, gdy użyje jej w klasie B to wartość bedzie losowa np. -6345

 

class A
public:
int getzadane_pytania(int);
	~losowanie();
	
	
protected:
	int zadane_pytania[50]; 
--------------------------------------------------------------
int losowanie::getzadane_pytania(int x)
{
	return zadane_pytania[x];
}
------------------------------------------------------------
main
A a1;
cout << a1.getzadane_pytania(3); // np. zwróci wartosc 6
----------------------------------------------------------------
class B : public A
------------------------------------------------------------------
A b1;
cout << b1.getzadane_pytania(3) // zwróci -8976

 

2 odpowiedzi

0 głosów
odpowiedź 4 listopada 2015 przez draghan VIP (106,230 p.)
Pokaż, gdzie wypełniasz tę tablicę.
komentarz 4 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)
Ogólnie ten "kod" jest strasznie niejasny.
komentarz 4 listopada 2015 przez furas Maniak (53,800 p.)
@Patrycjerz mam to samo wrażenie więc zrezygnowałem z pisania czegokolwiek.
komentarz 4 listopada 2015 przez draghan VIP (106,230 p.)
Już tego nie pisałem, bo by wychodziło na to, że w każdym temacie, gdzie się wypowiadam, muszę zawsze coś komuś poprawić. >.<

Ale nie jest AŻ tak niejasny, jak to bywało u innych - więc dajmy szansę. :)
komentarz 4 listopada 2015 przez Rout Bywalec (2,350 p.)

Nie chciałem pisać całego kodu bu było by tu strasznie dużo go, a zresztą całym kodem nie chcę się dzielić :)

Myśle że to powinno wystarczyć mogą tam być błedy ale nie o to chodzi chodzi o sam sens pozyskania wartości tablicy "zadane_pytania[]"


 

//Plik nagłówkowy klasy
class losowanie
{
public:
	losowanie(int = 0, int = 0, int = 0); // konstruktor z wartosciami domslnymi
	void los(); // funkcja realizujaca losowanie od 1 do 100
	void wys();
	void zerowanie();//zerowanie tablicy
	int getzadane_pytania(int);
	~losowanie();
	
	
protected:
	int zadane_pytania[50]; // tablica z numerami pytan ktore byly juz wylowane
	int numer_pytania; // zmienna na numer pytania
	int tab_przejscie; // zmienna do przejscia do nastepnych wierszy tablicy
	int a; // zmienna do petli losowania
};

____________________________
//Oczywiście wartości tablicy są inicjalizowane wcześniej.
// Plik źródłowy klasy losowanie
int losowanie::getzadane_pytania(int x)
{
	return zadane_pytania[x];
}
__________________________
//Program Main
losowanie k;
cout<<k.getzadane_pytania(0); // poda odpowiednią watrość załużmy że "3"

______________________________
//plik nagłówkowy klasy zap_od

#include "losowanie.h"
#include <string>
using namespace std;
class zap_od :
	public losowanie
{
public:
	void a();
}
_________________________________
//Plik źródłowy klasy zap_od

losowanie l;

cout << l.getzadane_pytania(0) // zwróci wartość 0, i o to mi chodzi dlaczego zawsze 0 a nie tak jak w main to co powinno byc. Moze jest inny sposób uzyskania wartości tablicy "zadane_pytania[]" ?

 

komentarz 4 listopada 2015 przez draghan VIP (106,230 p.)
Naprawdę ciężko wyciągnąć jakieś wnioski, na podstawie tak poszatkowanego kodu.

Powiem Ci tyle: skoro to jest składowa o dostępie protected i ją dziedziczysz publicznie, to w klasie pochodnej jest prywatna. Więc nie ma innej możliwości dostępu do niej, jak poprzez metodę tejże klasy.

Skoro uważasz, że wyciągasz błędne wartości z tej tablicy, to przyjrzyj się trzy razy miejscu, w którym wpisujesz do tej tablicy dane. Bo sam proces dziedziczenia nie zaburza jakoś magicznie działania metod.
komentarz 4 listopada 2015 przez Rout Bywalec (2,350 p.)
Ma ktoś chwilę abym pokazał problem streamując obraz za pomocą join.me ?
komentarz 4 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)
A może nie zainicjalizowałeś tablicy danymi? Jeśli dziedziczysz zmienne/stałe z jakieś klasy, to nie dziedziczysz także ich wartości, więc musisz je samodzielnie podać.
komentarz 4 listopada 2015 przez Rout Bywalec (2,350 p.)
Tablica z danymi jest "zerowana" a następnie są wstawiane w nią losowe wartości.
komentarz 4 listopada 2015 przez Patrycjerz Mędrzec (192,320 p.)

A wrzuć cały kod na np. http://pastebin.com/. Będę mógł wszystko zobaczyć, a nie pytać się ciągle o każdy duperel smiley

0 głosów
odpowiedź 4 listopada 2015 przez criss Mędrzec (172,590 p.)
Tylko że... nie uzywasz jej w klasie B. Oba obiekty są obiektami klasy A.

Btw. jesli juz zamieniasz nazwy klas na A i B, to zamieniaj wszędzie :P (linijka 10).

Najwyrazniej nie wypelniles tablicy w 2. obiekcie i masz tam śmieci.

Lepiej pokaż gdzie tablica jest wypełniana (kod).
PS. Wydaje mi sie, ze nie rozumiesz na czym polega dziedziczenie.
komentarz 4 listopada 2015 przez Rout Bywalec (2,350 p.)
Ten kod pierwszy to syf(i przepraszam za to) kieduj się kodem poniżej w komentarzach.

Podobne pytania

0 głosów
2 odpowiedzi 1,369 wizyt
pytanie zadane 22 sierpnia 2020 w Java przez Bakkit Dyskutant (7,600 p.)
0 głosów
2 odpowiedzi 185 wizyt
0 głosów
1 odpowiedź 193 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...