Faza inicjalizacji konstruktora

Faza inicjalizacji konstruktora
mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Witam. Mam taki kod:

Kopiuj
class Klasa1
{
	public:
		int its_zm;
		Klasa1() : its_zm(0) {}
		Klasa1(int a) : its_zm(a) {}
}

class Klasa2
{
 	public:
		int tab_int[20];
		char tab_char[20];
		int its_zm;
		Klasa1 obiekt;
		Klasa2(int inicj): its_zm(inicj), tab_int(???), tab_char(???), obiekt(???) {} // tutaj!
}

Moje pytania brzmią tak:

  1. Czy da się zainicjalizować tablice int/char w fazie inicjalizacji konstruktora? Jeśli tak to w jaki sposób? Prosiłbym o przedstawienie tego problemu na powyższym przykładzie ;)
  2. Wyczytałem że tworząc obiekt klasy Klasa2 do stworzenia skladowej obiekt zostanie wywołany automatycznie domyślny konstruktor Klasa1 a jak wymusić wywołanie innego konstruktora tak abym mógł zainicjalizować również ten obiekt("skladowa")?
AF
  • Rejestracja: dni
  • Ostatnio: dni
0
  1. Co konkretnie masz na myśli mówiąc "zainicjalizować" ?
  2. Użyj listy inicjalizacyjnej
mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Pisząc zainicjalizować mam na myśli nadanie wartosci elementom tablicy.. Użyć ale jak? konkretniej bym prosił..;]

AF
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
Klasa2(int inicj) : obiekt(inicj) {}

Z tablicami się tak nie da, musisz je zainicjalizować ręcznie w ciele konstruktora.

mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Tak myslalem, ale wolalem sie upewnic ;) dzieki za odpowiedz;)

ZJ
  • Rejestracja: dni
  • Ostatnio: dni
0

W C++0x można zrobić tak:

Kopiuj
 #include <iostream>
#include <vector>
using namespace std;
struct state{
	int b[5];
	vector<int> c;
	state():b({1,2,3,4,5}),c({2,4,6,8,10}){}
};
int main(){
	state s;
	for (int i=0; i<5; i++)
		cout<<s.b[i]<<' '<<s.c[i]<<'\n';
}
Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

za dużo nawiasów, można zrobić

Kopiuj
state():b{1,2,3,4,5},c{2,4,6,8,10}{}

PS. finalna wersja standardu już jest, i będzie opublikowana w tym roku - więc można już mówić o C++11.

mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Ok dzięki;) Mam jeszcze małe pytanko: CZy C++0x bardzo rózni się od obecnego standardu? Pytam ponieważ jestem w trakcie nauki C++ i nie wiem czy będe musiał uczyć się "na nowo" czy to tylko kwestia zapisu nie ktorych elementów jezyka?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

C++0x jedynie rozszerza istniejący standard,nie wywraca go do góry nogami

Rozszerza, ale na tyle mocno, że momentami to nie wygląda już jak stary dobry C:

Kopiuj
auto main() -> int
{
}

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.