Faza inicjalizacji konstruktora

Odpowiedz Nowy wątek
2011-08-15 12:15
0

Witam. Mam taki kod:

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")?

edytowany 1x, ostatnio: mto9, 2011-08-15 12:16

Pozostało 580 znaków

2011-08-15 12:19
0
  1. Co konkretnie masz na myśli mówiąc "zainicjalizować" ?
  2. Użyj listy inicjalizacyjnej

Pozostało 580 znaków

2011-08-15 12:26
0

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

Pozostało 580 znaków

2011-08-15 13:10
0
Klasa2(int inicj) : obiekt(inicj) {}

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

Pozostało 580 znaków

2011-08-15 13:17
0

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

Da się w C++0x. - Zjarek 2011-08-16 06:50
Mogłbyś rozwinąć swoj komentarz? jak? - mto9 2011-08-21 21:12

Pozostało 580 znaków

2011-08-21 23:16
0

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

 #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';
}

Pozostało 580 znaków

2011-08-22 01:06
0

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

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.

edytowany 1x, ostatnio: Azarien, 2011-08-22 01:07

Pozostało 580 znaków

2011-08-23 17:27
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?

Nauka nie pójdzie w las.C++0x jedynie rozszerza istniejący standard,nie wywraca go do góry nogami - MasterBLB 2011-08-23 17:34

Pozostało 580 znaków

2011-08-23 17:49
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:

auto main() -> int
{
}
A co to robi proszę pana ? :O - lukas_gab 2011-08-23 17:58
O no widzę że jakieś nowości ;D a wiadomo coś na temat terminu opublikowania C++11? - mto9 2011-08-23 20:28
nic nie robi - normalna funkcja main w nowej składni: typ zwracany na końcu deklaracji - Azarien 2011-09-01 19:38
he? i tak z każda funkcja? auto to podobno tez typ, wiec typ przed i po funkcja? - mto9 2011-09-01 20:34

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0