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

Inicjalizacja obiektu klasy w innej klasie

Object Storage Arubacloud
+1 głos
1,947 wizyt
pytanie zadane 25 czerwca 2017 w C i C++ przez pimpek Użytkownik (680 p.)
edycja 25 czerwca 2017 przez pimpek

Witam.
Otoz mecze sie ze zrozmieniem inicjalizacji na liscie inicjalizujacej obiektu klasy zawartego w innej klasie.
 a dokladnie:

#include <iostream>
#include <conio.h>
#include<windows.h>

using namespace std;

class A
{ 
 public:
int a;  
 int b; 
A(): a(1),b(1){} //KONSTRUKTOR 
A(int sk):a(sk),b(sk){}

A( A &obiekt): a(100), b(obiekt.b) {cout<<"Wlasnie mnie wywoales";}//KONSTRUKTOR KOPIUJ

int zwroc()
{ return a; 
}
}; 


class B
{int c; 
 int d;
 A jeden; 
public: 
B(): c(0),d(0),jeden() {} //KONSTRUKTOR


B(B &obiekt,int c,float left):c(obiekt.c),d(obiekt.d), jeden(obiekt.jeden) {}  //KONSTRUKTOR KOPIUJ

 void pokaz() 
 {  cout<< "=============== Moje skladniki to=====================\n";
  cout<<"Z pol klasy *B* "<< c <<" "<< d<<endl; 
  cout<<"Z pol klasy  *A*"<<jeden.a<<" "<< jeden.b;
  cout<<endl;
 }
 };

int main() 
{ B p1; 
B p2(p1);

 p1.pokaz();
 
 
p2.pokaz(); 
}  

Np taki prosty kod ( bez celu w celach uczacych).
czy obiekt "jeden mozna zaicjalizowac tylko w taki sposob?(chodzi o konstruktor kopiujacy)
Czy na tej liscie wywoalenie jeden(obiekt.jeden) = wywoluje konstruktor kopiujacy w klasie A ?
A gdybym chcial tylko zainicjowac tylko jeden skladnik klasy A np.a ,   niech b bedzie takie jak w kopiowanym obiekcie p1, czy dotrzec do skladnikow klasy A mozna tylko za pomoca konstruktora kopiujacego?

Przepraszam, za nieskladnosc, ale mam sporo pytan.
Jakby ktos mogl mi to jakos przyblizyc Dzieki.

1 odpowiedź

+2 głosów
odpowiedź 25 czerwca 2017 przez criss Mędrzec (172,590 p.)
wybrane 25 czerwca 2017 przez pimpek
 
Najlepsza

Czy na tej liscie wywoalenie jeden(obiekt.jeden) = wywoluje konstruktor kopiujacy w klasie A ?

Tak. Ale konstruktor kopiujący powinien przyjmować const referencje. Co więcej w klasie B masz przy jednym konstruktorrze komentarz sugerujący, że to jest konstruktor kopiujący. Konstruktor kopiujący musi być jednoargumentowy. Oczywiście ten twój nie jest błędny, tylko nie jest to z definicji konstruktor kopiujący.

czy dotrzec do skladnikow klasy A mozna tylko za pomoca konstruktora kopiujacego? 

Nie jestem pewien o co dokładnie pytasz, ale konstruktor ma takie same prawa dostępu jak każda inna metoda.

PS: W polu kodu zmień podświetlanie składni na C++. I staraj się, żeby kod był czytelny (przede wszytskim odpowiednie wcięcia). 

komentarz 25 czerwca 2017 przez pimpek Użytkownik (680 p.)

Ok ,super -dzieki za odpowiedz.

Jeszcze mam dwa pytania:
1. Gdybym chcial zainicjowac  osobno (jego skladniki) obiekt jeden, tzn cos takiego:
jeden.a(obiekt.jeden.a), jeden.b(20)  ( w zalozeniu ze te skladowe sa publiczne) czy istnieje taka mozliwosc? jesli tak to jak to wywolac? (bo to co napisalem nie dziala).
2.No i drugie, czy gdybym mial publiczna metode np.

class A

 void wartosc() 
    {   a=10;
        b=2222;
    } 

to moglbym jej uzyc do inicjalizacji tego obektu? Jesli tak to jak to wywowalanie by wygladalo bo np.jeden(wartosc()) - nie dziala.

 

komentarz 25 czerwca 2017 przez criss Mędrzec (172,590 p.)
  1. Nie, nie tak bezpośrednio. Możesz poprzez odpowiedni konstruktor klasy obiektu 'jeden'.
  2. Tak jak pokazałeś na pewno nie, bo wartosc() nic nie zwraca (zadeklarowales void). Nie możesz zainicjalizować obiektu 'niczym' (voidem). Myśle, że wiem co miałeś na myśli. Ale kompletnie nie tak - nie próbuj robić nic zbliżonego do tego. Gdyby jednak wartosc() zwracala obiekt klasy obiektu 'jeden', to tak (chociaż imo wołanie swoich metod w swojej liście inicjalizacyjnej - tzn. jeszcze przed zainicjalizowaniem wszystkich pól i wykonaniem ciała konstruktora - jest niebezpieczne i nie robiłbym czegoś takiego).

Podobne pytania

0 głosów
1 odpowiedź 512 wizyt
0 głosów
1 odpowiedź 483 wizyt
pytanie zadane 21 lipca 2019 w C i C++ przez karol_2502 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 217 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

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

...