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

question-closed Dziedziczenie prywatne

Object Storage Arubacloud
+2 głosów
368 wizyt
pytanie zadane 14 listopada 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
zamknięte 15 listopada 2016 przez Kasztan
Ayo,

mam takie pytanie: Jeżeli tworzę klasę, która dziedziczy prywatnie to może ona posiadać dwa obiekty tej samej innej klasy ? Np; dwa obiekty valarray ? Jak np napiszę potem metode która będzie mi wyświetlała zawartość tych tablic to jak je odróżnię ? O zawartości tych tablic będzie świadczyła kolejność na liście incjalizacyjnej konstruktora ;) czy jak ?

Dzięki z góry
komentarz zamknięcia: Uzyskałem odpowiedź
komentarz 14 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 14 listopada 2016 przez plkpiotr

Pewnie, że się da :)
Jak je odróżnisz? Po nazwie po prostu - to jest tak jak miałbyś kilka pól składowych tego samego typu np. int, czy string (ukłon w stronę obiektowego), o ile dziedziczenie nie zabroni nam dostępu do modyfikacji składowych lub typ, który podasz nie będzie reprezentował klasy abstrakcyjnej, bo takiego obiektu nie możemy utworzyć.

Z tym, że może to czasami narobić bałaganu podczas wywoływania konstruktorów.

komentarz 14 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
edycja 14 listopada 2016 przez Kasztan
class Pair : private valarray<int> {
private:
	typedef valarray<int> arrayInt;

public:
	Pair() : arrayInt(), arrayInt() {}
	Pair(int A, int B) : arrayInt(A), arrayInt(B) {}
	Pair(const int yr[], const int bot[], int y);
	void Add(int i);
	void show(int i) const;
	int s();

taka klasa

Pair::Pair(const int yr[], const int bot[], int y)
	: arrayInt(yr, y), arrayInt(bot, y)
{
} //konstruktor

void Pair::Add(int i)
{
	for (int j = 0; j < i; j++)
	{
		cout << "Podaj rocznik: ";
		cin >> arrayInt::operator[](j);
		cout << "Podaj liczbe butelek: ";
		cin >> arrayInt::operator[](j);

	}

}//metoda wczytująca dane do tablicy 

Tak to ma wyglądać ?

komentarz 14 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

Nie bardzo rozumiem po co próbować dziedziczyć w ten sposób, poważnie...

#include <iostream>
#include <valarray>
using namespace std;

class Pair {
private:
    valarray<int> arrayFirst;
    valarray<int> arraySecond;
public:
    Pair(int value1, int size1, int value2, int size2) : arrayFirst(value1,size1), arraySecond(value2,size2) {}
    void show() const {
        for (unsigned int i = 0; i < arrayFirst.size(); i++)
            cout << arrayFirst[i] << endl;
        for (unsigned int i = 0; i < arraySecond.size(); i++)
            cout << arraySecond[i] << endl;
    }
};

int main() {
    Pair example = Pair(1, 3, 2, 4);
    example.show();
    return 0;
}

Takie podejście wydaje mi się znacznie bardziej naturalne...

komentarz 14 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
no ty stosujesz zawieranie ja chciałem przećwiczyć dziedzicznie prywatne, wygodniejsze  i częściej używane jest zawieranie :)
komentarz 14 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 15 listopada 2016 przez plkpiotr

Rozumiem, jeśli filozofia języka na to pozwala to dlaczego sobie nie poćwiczyć ; )
Mimo tego zostaję przy swojej koncepcji, nie będę sobie mącił w głowie... Poza tym nie mam na tyle wiedzy, by napisać jak rozwiązać Twój problem.

komentarz 14 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
Mącił w głowie xd ? Być może kiedyś w pracy znajdziesz się w sytuacji, że będziesz musiał skorzystać z dziedziczenia prywatnego np gdy będziesz chciał ponownie zdefiniować funkcje wirtualną

2 odpowiedzi

+1 głos
odpowiedź 15 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
wybrane 15 listopada 2016 przez Kasztan
 
Najlepsza

Zdaje się, że dysponujesz książką Praty ;) Teraz już rozumiem dlaczego tak usilnie nad tym myślałeś, chwała Ci za to :) W rozdziale czternastym (Wielokrotne użycie kodu C++) znajdziesz wyjaśnienie tzn. na 704 stronie (w wydaniu VI) jest taki nagłówek: „Zawieranie czy dziedziczenie prywatne?”, który traktuje o różnicach tych dwóch sposobów. Idąc za autorem:

„Ponadto zawieranie umożliwia umieszczenie w klasie więcej niż jednego podobiektu tej samej klasy. (...) Dziedziczenie ogranicza nas do pojedynczego obiektu.”

komentarz 15 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
No też już to znalazłem :) ale fajnie, że to się wyjaśniło bo nie dawało mi to spokoju :)
komentarz 15 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
Mnie podobnie : )
0 głosów
odpowiedź 15 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
Ma ktoś jakiś pomysł na to ?
komentarz 15 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
???
komentarz 15 listopada 2016 przez L33TT12 Gaduła (3,950 p.)
Z tego co pamiętam, to najprawdopodobniej się nie da :)
Ponieważ trzeba odwoływać się za pośrednictwem nazwy więc jest to niemożliwe, jeśli dziedziczysz prywatnie klasę bazową to w klasie pochodnej odwołujesz się do niej poprzez nazwę. Jakbyś chciał mieć 2 lub więcej takich obiektów to jakbyś odwoływał się do 2? Nie da się.
komentarz 15 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
No też do takich wniosków doszedłem, ale zobacze co inni jeszcze powiedzą
komentarz 15 listopada 2016 przez Kasztan Dyskutant (8,080 p.)
Ma ktoś jeszcze swoje zdanie na ten temat : D ?

Podobne pytania

0 głosów
3 odpowiedzi 951 wizyt
0 głosów
2 odpowiedzi 1,374 wizyt
pytanie zadane 3 maja 2017 w C i C++ przez Programeł Gaduła (3,500 p.)
0 głosów
2 odpowiedzi 547 wizyt
pytanie zadane 9 września 2017 w C i C++ przez B0nkers Początkujący (310 p.)

92,550 zapytań

141,392 odpowiedzi

319,520 komentarzy

61,935 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!

...