W jaki sposób zrobić konstruktor kopiujący konstruktora domyślnego?

0

Witam,
w jaki sposób zrobić kontruktor kopiujący konstruktora domyślnego, bo próbuję:

macierz a();
macierz a2(aa);

niestety, to nie działa.
http://ideone.com/Ng1hZs

0
macierz::macierz(const macierz &mk)
  {
   m_height=mk.m_height;
   m_width=mk.m_width;
   tab=new double*[mk.m_height];
   for(int h=0;h<mk.m_height;++h)
     {
      tab[i]=new double[m_width];
      for(int w=0;w<mk.m_width;++w) tab[h][w]=mk.tab[h][w];
     }
  }
0

zrobiłem coś takiego:

macierz();
macierz(macierz);

i wtedy korzystam z wcześniej zadeklarowanego konstruktora kopiującego.
Na ekranie pojawiło się to samo. Czy to jest poprawne?

EDIT: Ok. Widzę, że w/w kod jest potrzebny, tylko nie wiem jakie jest wywołanie tego konstruktora kopiującego, macierz(macierz);?

0
macierz M;
macierz A(M); // jawne wywołanie konstruktora kopiującego
macierz B=M; // wywołanie konstruktora kopiującego spowodowane przez http://en.wikipedia.org/wiki/Copy_elision
void funA(macierz m); // przy wywołaniu tej funkcji parametr przekazywany poprzez konstruktor kopiujący
macierz funB(); // przy wywołaniu tej funkcji zwracana wartość poprzez konstruktor kopiujący (ale optymalizator to może usunąć)
0

wywołuje pierwszy kopiujący:

macierz();
macierz(macierz);

następnie drugi, ale ten wtedy nie działa, ze względu na wywołanie macierz(macierz):

macierz mk(5, 5);
macierz mk2(mk);
0

Jako pierwszy kopiujacy wywołuje Twój kod. Następnie wywołuje ten:

macierz::macierz(macierz& mk) {
	tab = new double*[mk.m_width];
	m_width = mk.m_width;
	for (int i = 0; i < mk.m_height; i++){
		tab[i] = new double[mk.m_height];
		tab[i] = mk.tab[i];
	}
	cout << "\n";
	for (int i = 0; i < mk.m_height; i++){
		cout << "\n";
		for (int j = 0; j < mk.m_width; j++)
			printf("%2g   ", tab[i][j]);
	}
}

analogicznie:

macierz();
macierz(macierz);

macierz mk(5, 5);
macierz mk2(mk);
0

no dobra, ale ja chce skopiować też ten konstruktor:

macierz::macierz(int height, int width){
	m_height = height;
	m_width = width;
	tab = new double*[m_width];
	for (int i = 0; i < m_width; i++)
		tab[i] = new double[m_height];
	
}
1

Konstruktor kopiujący nie kopiuje konstruktorów, konstruktor kopiujący kopiuje obiekty.
ten konstruktor po poprawieniu:

macierz::macierz(unsigned height,unsigned width):m_height(height),m_width(width)
  {
   tab=new double*[m_height];
   for(unsigned h= 0;h<m_height;++h) tab[h]=new double[m_width]; 
  }

może zostać.

0

nie mam sił do tego.
może mi ktoś napisać, żeby program kopiował obiekt kontruktora domyślnego i obiekt konstruktora macierz::macierz(int height, int width){

0

żeby program kopiował obiekt kontruktora domyślnego i obiekt konstruktora macierz::macierz(int height, int width)

Wiesz w ogóle o czym piszesz? Czym jest "obiekt konstruktora domyślnego" ? Takie coś nie istnieje.

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