Edit: Autor pytania usunął jego treść, ale w Internecie nic nie ginie :) Pytał o to jak naprawić poniższy kod:
#include <iostream>
using namespace std;
class PunktND {
int roz;
int* wsk;
static int liczba;
public:
PunktND(int i = 10) :roz(i), wsk(new int[roz]) { }
PunktND(int t[], int r);
PunktND(const PunktND&); // BŁĄD
~PunktND() { delete[]wsk; }
PunktND(const PunktND& x) :roz(x.roz), wsk(new int[roz]) // BŁAD CANNOT BE OVERLOADED
{
for (int i = 0; i < roz; i++) {
wsk[i] = x.wsk[i];
}
}
PunktND& operator=(const PunktND& k);
PunktND& operator += (const PunktND& b) {
for (int i = 0; i < b.roz; i++)
wsk[i] += b.wsk[i];
return *this;
}
PunktND& operator ++ () {
for (int i = 0; i < roz; i++)
wsk[i] += 1;
return *this;
}
PunktND operator ++ (int) {
for (int i = 0; i < roz; i++)
wsk[i] += 1;
return *this;
}
PunktND& operator += (int b) {
for (int i = 0; i < roz; i++)
wsk[i] += b;
return *this;
}
int& operator[](unsigned int ktory) { return wsk[ktory]; }
friend PunktND operator+(const PunktND&, const PunktND&);
friend istream& operator >> (istream&, PunktND&);
friend ostream& operator << (ostream&, const PunktND&);
};
PunktND& PunktND::operator=(const PunktND& p) {
if (this->wsk != p.wsk)
{
delete[] wsk;
roz = p.roz;
wsk = new int[roz];
}
for (int i = 0; i < p.roz; i++)
wsk[i] = p.wsk[i];
return *this;
}
PunktND::PunktND(const PunktND& k) : roz(k.roz), wsk(new int[roz]) {
for (int i = 0; i < roz; i++) wsk[i] = k.wsk[i];
}
PunktND operator+(const PunktND& a, const PunktND& b)
{
PunktND tmp(a.roz);
int* tmp1 = a.wsk;
int* tmp2 = b.wsk;
int* tmp3 = tmp.wsk;
if (a.roz == b.roz)
for (int i = 0; i < a.roz; i++)
*(tmp3++) = *(tmp1++) + *(tmp2++);
else return PunktND(0);
return tmp;
}
ostream& operator << (ostream& ekran, const PunktND& k)
{
ekran << "[ ";
for (int i = 0; i < k.roz; i++)
{
ekran << k.wsk[i] << " ";
}
ekran << "]";
return ekran;
}
istream& operator >> (istream& kl, PunktND& k)
{
for (int i = 0; i < k.roz; i++)
{
cout << i << " - element : ";
kl >> k.wsk[i];
}
return kl;
}
int PunktND::liczba = 0;
int t1[] = { 12, 12, 12, 12 };
PunktND p1(4), p2(t1, 4);
PunktND p3(11);
int main()
{
cin >> p1;
cout << p1 << endl;
cout << p2 << endl;
p3 = p1 + p2;
p1 += -22;
cout << p1;
cout << p3 << endl;
p3[3] = 44;
cout << p3 << endl;
cout << p2 << endl;
cout << p3 << endl;
p3 = p2 = p1;
cout << (p2 = p1);
cout << p3 << endl;
cout << (p3 = p2 =p1);
p3 = p1 + p2;
cout << p1 << endl;
cout << p2 << endl;
cout << p3 << endl;
}
Edit: Moja odpowiedź, która mu pomogła:
Jeżeli ktoś wie dlaczego kompilator twierdzi, że to jest przeładowanie a nie redefinicja, to chętnie posłucham. Ale nie będę się z kompilatorem kłócił :)
Nie możesz przeładować funkcji PunktND(const PunktND&) bo zobacz co by było jakbyś mógł:
PunktND(const PunktND&)
{
std::cout << "A";
}
PunktND(const PunktND&)
{
std::cout << "B";
}
// i w mainie...
PunktND x = jakisInnyPunkt;
Co byś się spodziewał zobaczyć na ekranie? A czy B? :)
No i kompilator też nie wie co zrobić i Ci mówi, że tak nie można :)