<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem przeciazanie</title>
<link>https://forum.pasja-informatyki.pl/tag/przeciazanie</link>
<description>Powered by Question2Answer</description>
<item>
<title>Przeciążanie operatorów w klasie</title>
<link>https://forum.pasja-informatyki.pl/595989/przeciazanie-operatorow-w-klasie</link>
<description>

&lt;p&gt;Witam,&lt;/p&gt;



&lt;p&gt;zacząłem się bawić w klasy w C++. W ramach treningu napisałem swój wektor. Chciałem przeciążyć operator[] w taki sposób, żebym mógł pisać np.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
vec[i]=vec[i-1]+3&lt;/pre&gt;



&lt;p&gt;Dotychczas zwracałem wartość tablicy w indeksie i, ale w takim wypadku nie działa przypisanie do indeksu. Nie wiem jak zrobić by raz vec[i] dawało element jaki przechowuje wektor, a raz wskaźnik na element by można było przypisać wartość.&lt;/p&gt;



&lt;p&gt;W skrócie, mój kod wygląda tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
template &amp;lt;typename Typ&amp;gt; class Wektor
{
    Typ *content;  //zawartosc
    int capacity;  //maksymalna pojemnosc
    int current;  //indeks ostatniej komorki+1

public:
    Wektor();
    ~Wektor();
    Typ get(int index);  //zwraca content[index]
    void push_back(int val);
    
    Wektor&amp;amp; operator=(Wektor&amp;amp; other);  //i to dziala jak powinno

    Typ operator[](int i)
    {
        if(i&amp;gt;=size())  //jesli jest ponad zakresem to blad
            exit(0);
        return get(i);  //zwroc wartosc
    }
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;Z góry dzięki za pomoc.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/595989/przeciazanie-operatorow-w-klasie</guid>
<pubDate>Mon, 23 Sep 2024 10:48:46 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatorów C++</title>
<link>https://forum.pasja-informatyki.pl/580632/przeciazanie-operatorow-c</link>
<description>

&lt;p&gt;Siema, mam do Was pytanko odnośnie przeciążania operatorów w C++. Mianowicie załóżmy, że mam strukturę jakichśtam obiektów. Niech to będzie struktura Punkt2D przechowująca dwie zmienne: zmienną X oraz Y kartezjańskiego układu współrzędnych. Mam je teraz posortować względem odległości od punktu S(0, 0), a gdy dwa punkty są jednakowo oddalone od punktu S, sortujemy względem zmiennej X rosnąco.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
struct Punkt2D {
    int X, Y;
    double R;
};&lt;/pre&gt;



&lt;p&gt;No i wszystko gra, tylko, że do tej pory robiłem to tak (sortowanie):&lt;/p&gt;



&lt;ul&gt;
	

&lt;li&gt;tworzyłem pomocniczą funkcję typu bool, która posłuży jako argument metody&amp;nbsp;std::sort()&lt;/li&gt;
	

&lt;li&gt;wywoływałem metodę std::sort() z moją pomocniczą funkcją typu bool&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Wygląda to mniej więcej tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;

#define N 3

struct Punkt2D {
	int X, Y, R;
	// R - odleglosc od pkt S(0, 0)
};

bool cmp(Punkt2D &amp;amp;a, Punkt2D &amp;amp;b) {
	if (a.R == b.R)
		return (a.X &amp;lt; b.X);
	return (a.R &amp;lt; b.R);
}

int main() {
	Punkt2D tab[] = {{3, 4, 5},
					{4, 3, 5},
					{5, 12, 13}};

	std::sort(tab, tab + N, cmp);
	return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Czasem jednak mam dosyć linii kodu, żeby się zgubić i mam pytanie: jak (bo wiem, że się jakoś da, tylko nie wiem jak) zrobić, żeby niejako nie trzeba było tworzyć funkcji cmp()? Wiem, że jakoś da się przeciążać operatory, ale chciałbym nauczyć się konkretnie na tym przykładzie, bo na internecie podają np. jak przeciążyć operator dodawania, tutaj to jest bezużyteczne.&lt;/p&gt;



&lt;p&gt;Dzięki z góry za poświęcony czas i nadsyłane komentarze i odpowiedzi :D&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/580632/przeciazanie-operatorow-c</guid>
<pubDate>Mon, 20 Feb 2023 19:50:00 +0000</pubDate>
</item>
<item>
<title>Przeciążanie [] tak, aby arr1D[][] było możliwe</title>
<link>https://forum.pasja-informatyki.pl/577222/przeciazanie-tak-aby-arr1d-bylo-mozliwe</link>
<description>

&lt;p&gt;Dzień dobry,&lt;/p&gt;



&lt;p&gt;starałem się cel ująć w tytule, niemniej należy tutaj dokładnie opisać, że mam na myśli rzecz następującą:&lt;/p&gt;



&lt;p&gt;Mam (dynamiczną) tablicę jednowymiarową i chcę traktować ją jako dwuwymiarową, zatem chciałbym móc na niej używać podwójnego operatora &quot;[]&quot;, gdzie pierwszy naturalnie wskazywałby wiersz, a drugi kolumnę.&lt;/p&gt;



&lt;p&gt;Doszedłem do tego:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
using namespace std;


class Matrix
{
    friend class MatrixRow;


private:
    double* matrix;
    unsigned rows;
    unsigned columns;

    unsigned rowIdx=0;


    class MatrixRow
	{
	    friend class Matrix;

    private:
		double operator[](unsigned i)
		{
			return Matrix::matrix[Matrix::rowIdx+i];
		}
	};


public:
	Matrix(unsigned rows, unsigned columns)
	{
	    this-&amp;gt;rows=rows;
	    this-&amp;gt;columns=columns;
	    matrix=new double[rows*columns];

	    for(unsigned i=0; i&amp;lt;rows*columns; i++)
        {
            matrix[i]=static_cast&amp;lt;double&amp;gt;(i)+0.1;
        }
	}

	void operator[](unsigned i) const
    {
        rowIdx=i;
        MatrixRow::operator[]()
    }

	void operator=(double* matrix)
	{
		this-&amp;gt;matrix=matrix;
	}
};



int main()
{
	Matrix matrix(3, 4);

	cout &amp;lt;&amp;lt; matrix[2][3];

    return 0;
}&lt;/pre&gt;



&lt;p&gt;W pierwszym operatorze [], którego przeciążenie obsługuje sama klasa Matrix, muszę przekazać indeks wiersza. Mogę sprawić, że klasa wewnętrzna,&amp;nbsp;MatrixRow,&amp;nbsp;będzie znała ten indeks poprzez zaprzyjaźnienie klas i dodatkowe pole RowIdx. Natomiast nie wiem, co z wywołaniem przeciążenia operatora w klasie MatrixRow. Co ja mam przekazać jako argument? Nie wiem, może już od początku to jest zły.&lt;/p&gt;



&lt;p&gt;Proszę o wskazówki.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/577222/przeciazanie-tak-aby-arr1d-bylo-mozliwe</guid>
<pubDate>Fri, 30 Dec 2022 13:57:51 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatorów w C++. Co oznacza ta linia?</title>
<link>https://forum.pasja-informatyki.pl/547869/przeciazanie-operatorow-w-c-co-oznacza-ta-linia</link>
<description>

&lt;p&gt;Witam,
&lt;br&gt;
Ostatnio szukam informacji na temat operatorów &amp;lt;&amp;lt; i &amp;gt;&amp;gt;. Chodzi o ich używanie poza cout i cin.
&lt;br&gt;
Natrafiłem na wpis, że to są normalne operatory, które można sobie dostosować pod funkcję/klasę czy obiekt.
&lt;br&gt;
Nie rozumiem za bardzo tego tematu. Czy może ktoś mi to wyjaśnić?&lt;/p&gt;



&lt;p&gt;W odpowiedzi na pytanie na StackOverflow (&lt;a rel=&quot;nofollow&quot; href=&quot;https://stackoverflow.com/questions/7757278/what-does-and-mean-in-c-for-cout-cin&quot;&gt;link&lt;/a&gt;)&amp;nbsp; jest linia kodu (poniżej podana) gdzie używane są operatory &amp;amp;. O ile jestem w stanie zrozumieć część tego kodu, to nie wiem w jakim kontekście są używane znaki &amp;amp;. Jako wskaźnik czy co?&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
template&amp;lt;typename T&amp;gt;
std::vector&amp;lt;T&amp;gt; &amp;amp; operator&amp;lt;&amp;lt;(std::vector&amp;lt;T&amp;gt; &amp;amp; v, T const &amp;amp; item)
&lt;/pre&gt;



&lt;p&gt;Przyznam, że temat wektorów mam nieprzepracowany, więc może dlatego nie rozumiem tego. Jeśli ktokolwiek może pokazać przeciążanie operatorów na przykładzie normalnych zmiennych czy klas, to byłbym wdzięczny.
&lt;br&gt;
Z góry dziękuję za każdą odpowiedź czy wskazówkę!&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/547869/przeciazanie-operatorow-w-c-co-oznacza-ta-linia</guid>
<pubDate>Thu, 29 Jul 2021 16:59:23 +0000</pubDate>
</item>
<item>
<title>Liczby zespolone po obiektowemu  -przeciążanie operatorów &lt;&lt; i &gt;&gt;</title>
<link>https://forum.pasja-informatyki.pl/525939/liczby-zespolone-po-obiektowemu-przeciazanie-operatorow-i</link>
<description>

&lt;p&gt;Cześć&lt;/p&gt;



&lt;p&gt;Na potrzeby programu muszę w poprawny sposób wypisywać liczby zespolone do czego mam się posłużyć funkcjami zaprzyjaźnionymi przeciążającymi operatory &amp;lt;&amp;lt; i &amp;gt;&amp;gt; .&lt;/p&gt;



&lt;p&gt;Poniżej podsyłam kod.&lt;/p&gt;



&lt;p&gt;Protoyp:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#ifndef COMPLEX_H_
#define COMPLEX_H_

class Complex
{
  private:
    double re, im;
  public:
    Complex(double real = 1.0, double imaginary = 1.0);
    Complex operator+(const Complex obj_temp);
    Complex operator-(const Complex obj_temp);
    Complex operator*(const Complex obj_temp);
    friend Complex operator*(double value, const Complex obj_temp);
    Complex operator~();
    friend std::istream &amp;amp; operator&amp;gt;&amp;gt;(std::istream &amp;amp; is, const Complex &amp;amp; number);
    friend std::ostream &amp;amp; operator&amp;lt;&amp;lt;(std::ostream &amp;amp; is, const Complex &amp;amp; number);
    ~Complex();


};

#endif&lt;/pre&gt;



&lt;p&gt;Implementacja:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &quot;complex0.h&quot;


Complex::Complex(double real, double imaginary)
{
  re = real;
  im = imaginary;
}

Complex Complex::operator+(const Complex obj_temp)
{
  Complex temp;
  temp.re = re + obj_temp.re;
  temp.im = im + obj_temp.im;
  return temp;
}

Complex Complex::operator-(const Complex obj_temp)
{
  Complex temp;
  temp.re = re - obj_temp.re;
  temp.im = im - obj_temp.im;
  return temp;
}

Complex Complex::operator*(const Complex obj_temp)
{
  Complex temp;
  temp.re = (re * obj_temp.re) - (im * obj_temp.im);
  temp.im - (re * obj_temp.im) + (im * obj_temp.re);
  return temp;
}

Complex operator*(double value, const Complex obj_temp)
{
  Complex temp;
  temp.re = value * obj_temp.re;
  temp.im = value * obj_temp.im;
  return temp;
}

Complex Complex::operator~()
{
  im = -im;
}

std::istream &amp;amp; operator&amp;gt;&amp;gt;(std::istream &amp;amp; is, const Complex &amp;amp; number)
{
  using std::endl;
  using std::cout;
  cout &amp;lt;&amp;lt; &quot;Skladowa rzeczywista: &quot;;
  while( !(is &amp;gt;&amp;gt; number.re) )
  {
    is.clear();
    while( is.get() != '\n' )
      continue;
    cout &amp;lt;&amp;lt; &quot;ERROR! Try again!&quot; &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;Skladowa rzeczywista: &quot;;
  }

  std::cout &amp;lt;&amp;lt; &quot;Skladowa urojona: &quot;;
  while( !(is &amp;gt;&amp;gt; number.im) )
  {
    is.clear();
    while( is.get() != '\n' )
      continue;
    cout &amp;lt;&amp;lt; &quot;ERROR! Try again!&quot; &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;Skladowa urojona: &quot;;
  }
  return is;
}

std::ostream &amp;amp; operator&amp;lt;&amp;lt;(std::ostream &amp;amp; os, const Complex &amp;amp; number)
{
  using std::cout;
  using std::endl;
  os &amp;lt;&amp;lt; &quot;(&quot; &amp;lt;&amp;lt; number.re &amp;lt;&amp;lt; &quot;, &quot; &amp;lt;&amp;lt; number.im &amp;lt;&amp;lt; &quot;i)&quot; &amp;lt;&amp;lt; endl;
  return os;
}
Complex::~Complex()
{

}
&lt;/pre&gt;



&lt;p&gt;main.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &quot;complex0.h&quot;

int main()
{
  using namespace std;
  Complex a(3.0, 4.0);
  Complex c;
  cout &amp;lt;&amp;lt; &quot;Podaj liczbe zespolona (k, ab zakonczyc):\n&quot;;
  cin &amp;gt;&amp;gt; c;
  cout &amp;lt;&amp;lt; &quot;c to &quot; &amp;lt;&amp;lt; c &amp;lt;&amp;lt; '\n';
  cout &amp;lt;&amp;lt; &quot;Sprzezona z c to &quot; &amp;lt;&amp;lt; ~c &amp;lt;&amp;lt; '\n';
  cout &amp;lt;&amp;lt; &quot;a to &quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt; '\n';
  cout &amp;lt;&amp;lt; &quot;a + c wynosi &quot; &amp;lt;&amp;lt; a + c &amp;lt;&amp;lt; '\n';
  cout &amp;lt;&amp;lt; &quot;a - c wynosi &quot; &amp;lt;&amp;lt; a - c &amp;lt;&amp;lt; '\n';
  cout &amp;lt;&amp;lt; &quot;a * c wynosi &quot; &amp;lt;&amp;lt; a * c &amp;lt;&amp;lt; '\n';
  cout &amp;lt;&amp;lt; &quot;2 * c wynosi &quot; &amp;lt;&amp;lt; 2 * c &amp;lt;&amp;lt; '\n';
  cout &amp;lt;&amp;lt; &quot;KONIEC&quot;;
  return 0;
}
&lt;/pre&gt;



&lt;p&gt;Po skompilowaniu i odpaleniu powstaje nieskończona pętla, która cały czas powtarza komunikat &quot;składowa rzeczywista&quot;. Tak więc problem najpewniej tkwi w mojej imlementacji obydwu funkcji zaprzyjaźnionych.&lt;/p&gt;



&lt;p&gt;Z góry dziękuję za odpowiedzi. :)&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/525939/liczby-zespolone-po-obiektowemu-przeciazanie-operatorow-i</guid>
<pubDate>Tue, 19 Jan 2021 16:22:17 +0000</pubDate>
</item>
<item>
<title>Nauka przeciążenia operatorów na przykładzie dodawania współrzędnych punktów.</title>
<link>https://forum.pasja-informatyki.pl/517861/nauka-przeciazenia-operatorow-na-przykladzie-dodawania-wspolrzednych-punktow</link>
<description>

&lt;p&gt;Cześć :)&lt;/p&gt;



&lt;p&gt;Uczę się właśnie przeciążenia operatorów i moim pierwszym mini zadankiem w celu przećwiczenia tego jest deklaracja dwóch punktów, a następnie utworzenia 3, który za pomocą przeciążenia operatora + załatwi całą sprawę dodawania współrzędnych.&lt;/p&gt;



&lt;p&gt;Wzorowałem się na treści z tego filmu:&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=N0R4rjUciuo&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watch?v=N0R4rjUciuo&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;A oto i mój kod (praktycznie bez różnic):&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;main.cpp&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &quot;punkt.h&quot;
using namespace std;

int main()
{
    Punkt X(5, 3);
    Punkt Y(2, 1);
    Punkt Z;
    Z = X + Y;
    return 0;
}&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;punkt.h&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
using namespace std;

class Punkt
{
private:
    int x, y;
public:
    Punkt(int a = 1, int b = 1);
    void read_object();
    friend Punkt  operator+ (Punkt&amp;amp; object);
};&lt;/pre&gt;



&lt;p&gt;&lt;strong&gt;punkt.cpp&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &quot;punkt.h&quot;
using namespace std;

Punkt::Punkt(int a, int b)
{
    x = a;
    y = b;

}
void Punkt::read_object()
{
    cout &amp;lt;&amp;lt; &quot;X: &quot; &amp;lt;&amp;lt; x &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; &quot;Y: &quot; &amp;lt;&amp;lt; y &amp;lt;&amp;lt; endl;
}
Punkt operator+ (Punkt&amp;amp; object)
{
    Punkt wynik;
    wynik.x = x + object.x;
    wynik.y = y + object.y;
    return wynik;
}
&lt;/pre&gt;



&lt;p&gt;Odnośnie ostatniej definicji funkcji z przeciążeniem operatorów wydaje mi się, że to powinno być:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Punkt Punkt :: operator+ (Punkt&amp;amp; object)
{
    Punkt wynik;
    wynik.x = x + object.x;
    wynik.y = y + object.y;
    return wynik;
}&lt;/pre&gt;



&lt;p&gt;, ale wtedy pokazuje mi się praktycznie 2 razy więcej błędów niż mam obecnie.&lt;/p&gt;



&lt;p&gt;Podaję jeszcze komunikaty, jakie mi wyskakują odnośnie błędów:&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;main.cpp&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;-dwuargumentowy &quot;+&quot;:&quot;Punkt&quot; nie definiuje operatora lub konwersji do typu akceptowalnego dla wstępnie zdefiniowanego operatora&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;punkt.cpp&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;- &quot;y&quot; to niezadeklarowany identyfikator&lt;/p&gt;



&lt;p&gt;- &quot;x&quot; to niezadeklarowany identyfikator&lt;/p&gt;



&lt;p&gt;Z góry dziękuję za wszystkie odpowiedzi. :)&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/517861/nauka-przeciazenia-operatorow-na-przykladzie-dodawania-wspolrzednych-punktow</guid>
<pubDate>Sun, 22 Nov 2020 15:50:44 +0000</pubDate>
</item>
<item>
<title>Wejście na serwer kiedy jest przeciążony.</title>
<link>https://forum.pasja-informatyki.pl/505911/wejscie-na-serwer-kiedy-jest-przeciazony</link>
<description>Witam.&lt;br /&gt;
W sobotę moja kobieta stanie przed wyborem tematu pracy licencjackiej. A serwery jej uczelni zdychają nawet w momencie wystawienia ocen. Gdzieś kiedyś widziałem post, że jakiś chłopak wszedł dziewczynie na serwer mimo tego ,że był on przeciążony. Mam pytanie jak zrobić coś takiego, zależy mi na tym mocno aby jej pomóc.&lt;br /&gt;
&lt;br /&gt;
Dziękuję za wszelkie odpowiedz.</description>
<category>Sieci komputerowe, internet</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/505911/wejscie-na-serwer-kiedy-jest-przeciazony</guid>
<pubDate>Thu, 27 Aug 2020 12:21:41 +0000</pubDate>
</item>
<item>
<title>Przeciążenia operatora []</title>
<link>https://forum.pasja-informatyki.pl/488619/przeciazenia-operatora</link>
<description>

&lt;p&gt;Jak przeciążyć operator [], żebym mógł używać go do macierzy? Np:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Matrix m(4,4);

cout&amp;lt;&amp;lt;macierz[2][1]&amp;lt;&amp;lt;endl;&lt;/pre&gt;



&lt;p&gt;Gdzie Matrix to jest klasa&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
class Matrix
{
public:

    float **tab;
    int x,y;

    Matrix(float** arg_tab, int xx, int yy);
    Matrix(const Matrix &amp;amp;_copy);
    Matrix(int xx, int yy);
    ~Matrix();
};&lt;/pre&gt;



&lt;p&gt;Konstruktory:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Matrix::Matrix(float** arg_tab, int xx, int yy)
{
    x = xx;
    y = yy;
    tab = new float*[y];
    for(int i=0; i&amp;lt;y; i++)
        tab[i] = new float[x];

    for(int i=0; i&amp;lt;y; i++)
        for(int k=0; k&amp;lt;x; k++)
            tab[i][k] = arg_tab[i][k];
}
Matrix::Matrix(const Matrix &amp;amp;_copy)
{
    x = _copy.x;
    y = _copy.y;
    tab = new float*[y];

    for(int i=0; i&amp;lt;y; i++)
    {
        tab[i] = new float[x];
        for(int k=0; k&amp;lt;x; k++)
            tab[i][k] = _copy.tab[i][k];
    }
}

Matrix::Matrix(int xx=1, int yy=1)
{
    x = xx;
    y = yy;

    tab = new float*[y];

    for(int i=0; i&amp;lt;y; i++)
        tab[i] = new float[x];
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/488619/przeciazenia-operatora</guid>
<pubDate>Fri, 15 May 2020 13:21:56 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatorów wejścia/wyjścia w języku C++</title>
<link>https://forum.pasja-informatyki.pl/474837/przeciazanie-operatorow-wejscia-wyjscia-w-jezyku-c</link>
<description>Siemka, jak przeciążyć operatory wejścia/wyjścia w c++? Nie chodzi mi o przeciążenie w klasie czy coś takiego.</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/474837/przeciazanie-operatorow-wejscia-wyjscia-w-jezyku-c</guid>
<pubDate>Sat, 07 Mar 2020 19:26:51 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatorów a tworzenie obiektu</title>
<link>https://forum.pasja-informatyki.pl/469714/przeciazanie-operatorow-a-tworzenie-obiektu</link>
<description>

&lt;p&gt;Cześć, mam problem z tym zadaniem, a mianowicie z przeciążeniem operatorów zaznaczonych&amp;nbsp;pogrubioną kursywą, oraz deklaracją obiektów.&amp;nbsp; Jeżeli mógłby ktoś napisać jak przeciążyć te operatory byłbym wdzięczny&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;Podaj implementację klasy Samochod, która
&lt;br&gt;
w sekcji prywatnej ma pola
&lt;br&gt;
- ileSiedzacych&amp;nbsp;- pole stałe o dodatniej wartości całkowitej, określające liczbę miejsc siedzących w samochodzie,
&lt;br&gt;
- ileZajetych&amp;nbsp;– pole o zmiennej wartości całkowitej, reprezentujące liczbę miejsc zajętych
&lt;br&gt;
oraz w sekcji publicznej
&lt;br&gt;
- konstruktor ustawiający wartości pól na podstawie dwóch parametrów o wartościach domyślnych. Wartości
&lt;br&gt;
domyślne to 5&amp;nbsp;w celu ustawienia pola max oraz 0 (zero) dla pola zajete;
&lt;br&gt;
- metodę Wolnych dającą w wyniku wywołania liczbę wolnych miejsc siedzących;
&lt;br&gt;
- metodę Pasazerow dającą w wyniku wywołania liczbę zajętych miejsc siedzących;
&lt;br&gt;
-przeciążony operator += , metoda pozwala na powiększenie liczby zajętych miejsc siedzących o co
&lt;br&gt;
najwyżej ustaloną nieujemną liczbę całkowitą, wynikiem metody jest liczba zajętych miejsc siedzących
&lt;br&gt;
- przeciążony operator-= , metoda pozwala na zmniejszenie liczby zajętych miejsc siedzących o co
&lt;br&gt;
najwyżej ustaloną nieujemną liczbę całkowitą, wynikiem metody jest liczba zajętych miejsc siedzących po
&lt;br&gt;
tej operacji&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;przeciążony operator+= , realizujący przesiadanie z innego samochodu&amp;nbsp;możliwie największej liczby
&lt;br&gt;
pasażerów, wynikiem metody jest liczba zajętych miejsc siedzących (pamiętaj o modyfikacji drugiego
&lt;br&gt;
samochodu);
&lt;br&gt;
-przeciążony operator-= , realizujący przesiadanie do innego samochodu&amp;nbsp;możliwie największej liczby
&lt;br&gt;
pasażerów, wynikiem metody jest liczba zajętych miejsc siedzących (pamiętaj o modyfikacji drugiego
&lt;br&gt;
samochodu);&lt;/strong&gt;
&lt;br&gt;
Ponadto powinna być możliwość korzystania z operatora &amp;lt;&amp;lt; wstawiania do strumienia wyjściowego
&lt;br&gt;
informacji o samochodu&amp;nbsp;zawierającej maksymalną liczbę miejsc siedzących i aktualną liczbę miejsc zajętych.
&lt;br&gt;
&lt;strong&gt;&amp;nbsp;Zadeklaruj
&lt;br&gt;
obiekt A45 reprezentujący samochod&amp;nbsp;mający 5&amp;nbsp;miejsc siedzących w tym 3&amp;nbsp;zajętych,
&lt;br&gt;
obiekt A32 reprezentujący samochodr mający 8&amp;nbsp;miejsca siedzące w połowie zajęte (zajęte 4),
&lt;br&gt;
wskaźnik A51 na dynamicznie utworzony pusty samochod&amp;nbsp;o 5&amp;nbsp;miejscach siedzących.
&lt;br&gt;
&amp;nbsp;Zakładamy, że nie wiemy jakie operacje zostały wykonane na wyżej wymienionych obiektach.
&lt;br&gt;
Należy napisać instrukcje pozwalające na
&lt;br&gt;
a) przesiadkę wszystkich osób z A45 do A32 i do samochodu&amp;nbsp;wskazywanego przez A51;
&lt;br&gt;
b) opuszczenie A32 przez 7 osób;
&lt;br&gt;
c) wejście 3 osób do A45 i 4 osób do samochodu&amp;nbsp;wskazywanego przez A51;
&lt;br&gt;
d) wyświetlenie liczby pasażerów we wszystkich trzech samochodach&amp;nbsp;razem;
&lt;br&gt;
e) wyświetlenie informacji o samochod&amp;nbsp;A32;
&lt;br&gt;
f) opuszczenie A32 przez wszystkie znajdujące się w nim osoby;
&lt;br&gt;
g) wyświetlenie informacji czy samochod&amp;nbsp;wskazywany przez A51 jest pełny (wszystkie miejsca zajete)&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

class Samochod
{
private:
    const int  ileSiedzacych;
    int ileZajetych;
public:
    Samochod(int s=5, int z=0);
    int Wolnych();
    int Pasazerow();
    Samochod &amp;amp;operator+=(Samochod k);
    Samochod &amp;amp; operator-=(Samochod k);

};

Samochod &amp;amp;Samochod::operator+=(Samochod k)
{
    ileZajetych+=k.ileZajetych;
    return *this;
}


int Samochod::Pasazerow()
{
    return ileZajetych;
}

int Samochod::Wolnych()
{
    return ileSiedzacych-ileZajetych;
}

Samochod::Samochod(int s, int z):ileSiedzacych(s)
{
    ileZajetych=z;
    if(ileZajetych&amp;lt;0 ||  ileZajetych&amp;gt;ileSiedzacych)
    {
        ileZajetych=0;
    }
}
int main()
{
    
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/469714/przeciazanie-operatorow-a-tworzenie-obiektu</guid>
<pubDate>Sat, 01 Feb 2020 22:22:55 +0000</pubDate>
</item>
<item>
<title>Ilość przeciążeń a efektywność</title>
<link>https://forum.pasja-informatyki.pl/445249/ilosc-przeciazen-a-efektywnosc</link>
<description>Czy ilość przeciążeń danej funkcji czy operatora wpływa na jego szybkość wywołania?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/445249/ilosc-przeciazen-a-efektywnosc</guid>
<pubDate>Fri, 16 Aug 2019 01:24:01 +0000</pubDate>
</item>
<item>
<title>Python - przeciążanie operatorów</title>
<link>https://forum.pasja-informatyki.pl/439380/python-przeciazanie-operatorow</link>
<description>

&lt;p&gt;Witam, od niedawna uczę się języka python ( poza C++ ), napisałem prostą testową klasę:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
class Point:

    def __init__(self, name, x, y):
        self.name = name
        self.x = x
        self.y = y

    def __str__(self):
        return f&quot;{self.name}({self.x}, {self.y})&quot;

    def __eq__(self, other):
        if self.x == other.x and self.y == other.y:
            return True
        return False

    def __add__(self, other):
        return Point(&quot;none&quot;, self.x + other.x, self.y + other.y)

    def __sub__(self, other):
        return Point(&quot;none&quot;, self.x - other.x, self.y - other.y)

    def multiplication_by_number(self, n):
        return Point(self.name, self.x * n, self.y * n)&lt;/pre&gt;



&lt;p&gt;Moje pytanie dotyczy przeciążeń metod dla różnych typów, wiem jak np. zrobić metodę która pomnoży przez siebie dwa punkty ( __mult__ ), co jednak jeśli chcę zrobić przeciążenie mnożenia punktu przez liczbę typu float a nie obiektu tej samej klasy? Tzn:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
p3 = p3 * 10&lt;/pre&gt;



&lt;p&gt;bo na razie umiem to zrobić tylko tak:&lt;/p&gt;



&lt;pre class=&quot;brush:python;&quot;&gt;
p3 = p3.multiplication_by_number(10)&lt;/pre&gt;



&lt;p&gt;w c++ obie metody wyglądały by w ten sposób:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Point operator*(Point p);
Point operator*(int n);&lt;/pre&gt;



&lt;p&gt;używając C++ mogę zrobić własną metodę czy niezależną funkcję dla każdego typu obiektów... ale w pythonie typy dobierane są automatycznie, czy jest w ogóle możliwość zrobienia czegoś takiego?&lt;/p&gt;



&lt;p&gt;Z góry dziękuje za pomoc i pozdrawiam ;)&lt;/p&gt;</description>
<category>Python</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/439380/python-przeciazanie-operatorow</guid>
<pubDate>Tue, 09 Jul 2019 20:25:52 +0000</pubDate>
</item>
<item>
<title>JAVA- Przeciążanie metod</title>
<link>https://forum.pasja-informatyki.pl/388145/java-przeciazanie-metod</link>
<description>Witajcie,&lt;br /&gt;
&lt;br /&gt;
mam pytanie odnosnie przeciążania metod w JAVA (w sumie w programowaniu).&lt;br /&gt;
&lt;br /&gt;
Ogólnie to chyba trochę &amp;quot;niebezpieczne&amp;quot;, więc ciekawi mnie jak to wyglada w dużych projektach/ programowaniu komercyjnym? Stosuje się standardowo, bez ograniczeń? Ewentualnie kiedy się stosuje, a kiedy nie?&lt;br /&gt;
&lt;br /&gt;
W małych programach pewnie nie zrobi dużej róznicy napisanie nawet 20-stu nowych metod, jednak przy duzym projekcie, gdzie ewentualnie trzeba byłoby stworzyć powiedzmy 1000 (lub więcej- strzelam na ślepo) nowych metod, zamiast przeciążyć istniejące, co z pewnościa odbiloby się na szybkości aplikacji/ programu oraz jej/ jego wielkości.&lt;br /&gt;
&lt;br /&gt;
Ktoś cos poprawi? Wypowie sie? Oczywiście najlepiej doświadczeni programiści z dużą wiedzą.</description>
<category>Java</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/388145/java-przeciazanie-metod</guid>
<pubDate>Mon, 22 Oct 2018 16:05:36 +0000</pubDate>
</item>
<item>
<title>Jaki jest cel przeciążania metod w Javie?</title>
<link>https://forum.pasja-informatyki.pl/386194/jaki-jest-cel-przeciazania-metod-w-javie</link>
<description>

&lt;p&gt;Jaki jest sens przeciążania metod? Skoro potrzebujemy 'double' to możemy po prostu usunąć linijkę z 'int' i zostawić tylko drugą metodę z 'double'.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:java;&quot;&gt;
public int dodaj (int a, int b) {
      return a+b;
}

public double dodaj (double a, double b) {
      return a+b;
}
    &lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>Java</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/386194/jaki-jest-cel-przeciazania-metod-w-javie</guid>
<pubDate>Sun, 14 Oct 2018 10:33:53 +0000</pubDate>
</item>
<item>
<title>Problem z przeciążeniem operatora==, do typu string (C++)</title>
<link>https://forum.pasja-informatyki.pl/380758/problem-z-przeciazeniem-operatora-do-typu-string-c</link>
<description>

&lt;p&gt;Witam mam taki mam problem z przeciążeniem operatora==(const class &amp;amp;, const class &amp;amp;).
&lt;br&gt;
W jednym z programów (wykorzystując typ char), utworzyłem takie oto przeciążenie:&lt;/p&gt;



&lt;p&gt;&quot;sign&quot; to składowa klasy, dokładniej&lt;/p&gt;



&lt;p&gt;char * sign;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
bool operator==(const Magazine &amp;amp; st1, const Magazine &amp;amp; st2)
{ return strcmp(st1.sign, st2.sign) == 0 ); }&lt;/pre&gt;



&lt;p&gt;W tym momencie chciałem utworzyć odpowiednie przeciążenie dla typu string, który będzie wykonywał dokładnie to samo.&lt;/p&gt;



&lt;p&gt;Jakiej funkcji (lub metody kodu) muszę użyć aby osiągnąć taki efekt.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/380758/problem-z-przeciazeniem-operatora-do-typu-string-c</guid>
<pubDate>Mon, 17 Sep 2018 15:55:00 +0000</pubDate>
</item>
<item>
<title>Zaprzyjaźnienie funkcji przeciążającej operator* (C++)</title>
<link>https://forum.pasja-informatyki.pl/370763/zaprzyjaznienie-funkcji-przeciazajacej-operator-c</link>
<description>

&lt;p&gt;Problem polega na tym, jest niezgodność z zaprzyjaźnioną funkcją operatora*. Funkcja posiada 2 argumenty i definicję. Sprawdzałem wiele artykułów i nie wiem gdzie leży błąd.&lt;/p&gt;



&lt;p&gt;plik nagłówkowy:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#ifndef STONEWT_H_
#define STONEWT_H_

#include &amp;lt;iostream&amp;gt; // dla obiektu std::ostream
class Stonewt
{
        private:
                enum {Lbs_per_stn = 14}; //liczba funtów na kamienie
                int stone;               //masa w całych kamieniach
                double  pds_left;        //reszta w funtach
                double pounds;           //masa w funtach
        public:
                //konstruktory
                Stonewt();                       //kontruktor domyśny 
                Stonewt(double lbs);             //konstruktor dla funtów
                Stonewt(int stn, double lbs);    //konstruktor dla kamieni i funtów
                //przeciążenia
                Stonewt operator+(const Stonewt &amp;amp; value) const;          //przeciążenie operatora+ dla...
                Stonewt operator-(const Stonewt &amp;amp; value) const;             //przeciążenie operatora- dla...
                friend Stonewt operator*(double d_value, const Stonewt &amp;amp; value);             //przeciążenie operatora* dla...
                friend std::ostream &amp;amp; operator&amp;lt;&amp;lt;(std::ostream &amp;amp; os, const Stonewt &amp;amp; text); 
};

#endif
&lt;/pre&gt;



&lt;p&gt;deklaracje:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;stonewt.h&quot; // zawiera &amp;lt;iostream&amp;gt;

Stonewt::Stonewt() { stone = pounds = pds_left = 0; }
Stonewt::Stonewt(double lbs)
{
        stone = int (lbs) / Lbs_per_stn; //dzielenie całkowite
        pds_left = int (lbs) % Lbs_per_stn + lbs - int (lbs);
        pounds = lbs;
}
Stonewt::Stonewt(int stn, double lbs)
{
        stone = stn;
        pds_left = lbs;
        pounds = stn * Lbs_per_stn + lbs;
}

Stonewt Stonewt::operator+(const Stonewt &amp;amp; value) const { return Stonewt(stone + value.stone, pounds + value.pounds); }

Stonewt Stonewt::operator-(const Stonewt &amp;amp; value) const { return Stonewt(stone - value.stone, pounds - value.pounds); }

Stonewt operator*(double d_value, const Stonewt &amp;amp; value) { return value * d_value; }

std::ostream &amp;amp; operator&amp;lt;&amp;lt;(std::ostream &amp;amp; os, const Stonewt &amp;amp; text)
{
        os &amp;lt;&amp;lt; &quot;Masa w kamieniach: &quot; &amp;lt;&amp;lt; text.stone &amp;lt;&amp;lt; &quot; kamieni, &quot; &amp;lt;&amp;lt; text.pds_left &amp;lt;&amp;lt; &quot; funtów\n&quot; &amp;lt;&amp;lt; &quot;Masa w funtach: &quot; &amp;lt;&amp;lt; text.pounds &amp;lt;&amp;lt; &quot; funtów\n&quot;;
        return os;
}
&lt;/pre&gt;



&lt;p&gt;Proszę o podpowiedź co mogło pójść tutaj nie tak.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/370763/zaprzyjaznienie-funkcji-przeciazajacej-operator-c</guid>
<pubDate>Fri, 03 Aug 2018 21:35:56 +0000</pubDate>
</item>
<item>
<title>Przeciązenie operatorów (C++)</title>
<link>https://forum.pasja-informatyki.pl/369187/przeciazenie-operatorow-c</link>
<description>Czy przeciązenie operatów występuję tylko i wyłącznie w programowaniu obiektowym (mam tu na myśli tylko w klasach) ?&lt;br /&gt;
&lt;br /&gt;
Czy jest szansa aby wykorzystać to jako zwykłą funkcje, a nie składową ?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/369187/przeciazenie-operatorow-c</guid>
<pubDate>Sat, 28 Jul 2018 15:11:44 +0000</pubDate>
</item>
<item>
<title>Wywołanie przeciążenia operatora&lt;&lt; (C++)</title>
<link>https://forum.pasja-informatyki.pl/364463/wywolanie-przeciazenia-operatora-c</link>
<description>

&lt;p&gt;Witam napisałem program, w którym występują przeciązenia:&lt;/p&gt;



&lt;p&gt;Obie występują klasie, ich deklaracja jest poprawna, różnia się wywołaniami&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
friend std::ostream &amp;amp; operator&amp;lt;&amp;lt;(std::ostream &amp;amp; out, const Wektor &amp;amp; word_out);
friend std::ostream &amp;amp; operator&amp;lt;&amp;lt;(std::ostream &amp;amp; out, double &amp;amp; multi);
&lt;/pre&gt;



&lt;p&gt;Oto wywołania:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
operator&amp;lt;&amp;lt;(std::cout, class_object);
 std::cout.operator&amp;lt;&amp;lt;(d_value);&lt;/pre&gt;



&lt;p&gt;Problem polega na tym, że wywołanie pierwszej funkcji jest całkowicie poprawne, natomiast drugie wyświetla wartość z wyrażenia, jednak nie wyświetla tekstu, ani przeniesienia do nowej linii.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
std::ostream &amp;amp; operator&amp;lt;&amp;lt;(std::ostream &amp;amp; out, double &amp;amp; multi)
        {
                Wektor o;
                out &amp;lt;&amp;lt; &quot;\nMnożenie: &quot; &amp;lt;&amp;lt; o.operator*(multi) &amp;lt;&amp;lt; std::endl &amp;lt;&amp;lt; std::endl;
                return out;
        }
&lt;/pre&gt;



&lt;p&gt;W jaki sposób mogę sprawić aby działał poprawnie?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/364463/wywolanie-przeciazenia-operatora-c</guid>
<pubDate>Mon, 09 Jul 2018 06:51:47 +0000</pubDate>
</item>
<item>
<title>Problem z utworzeniem obiektu ostream</title>
<link>https://forum.pasja-informatyki.pl/363339/problem-z-utworzeniem-obiektu-ostream</link>
<description>

&lt;p&gt;Próbowałem wielu sposobów i dodałem wszystko to co powinno być zawarte mimo wszystko, wciąż pokazuje błąd:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;out.h&quot;
int main()
{
        Out result(&quot;London&quot;, 30000);
        std::ostream os;
        operator&amp;lt;&amp;lt;(os, result);
        os &amp;lt;&amp;lt; result;
}//main&lt;/pre&gt;



&lt;p&gt;Dyrektywa #include &amp;lt;iostream&amp;gt;, zawarta jest w pliku nagłówkowym.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
In file included from /usr/include/c++/5/iostream:39:0,
                 from out.h:4,
                 from main_out.cpp:1:
/usr/include/c++/5/ostream: In function ‘int main()’:
/usr/include/c++/5/ostream:384:7: error: ‘std::basic_ostream&amp;lt;_CharT, _Traits&amp;gt;::basic_ostream() [with _CharT = char; _Traits = std::char_traits&amp;lt;char&amp;gt;]’ is protected
       basic_ostream()
       ^
main_out.cpp:5:15: error: within this context
  std::ostream os;&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/363339/problem-z-utworzeniem-obiektu-ostream</guid>
<pubDate>Wed, 04 Jul 2018 13:06:50 +0000</pubDate>
</item>
<item>
<title>Projektowanie klasy abstrakcyjnej, problem z wirtualnym przciążaniem operatora&lt;&lt;</title>
<link>https://forum.pasja-informatyki.pl/355248/projektowanie-klasy-abstrakcyjnej-problem-z-wirtualnym-przciazaniem-operatora</link>
<description>

&lt;p&gt;Hej, ćwicząc nowo nabywaną wiedzę zacząłem projektować prostą klasę bazową o nazwie BaseRectangle, z niej dziedziczy klasa opisująca kwadrat oraz opisująca prostokąt. Dla klas potomnych chciałem przeciążyć operator&amp;lt;&amp;lt;&lt;/p&gt;



&lt;p&gt;( jego definicja wygląda inaczej dla dwóch klas dziedziczących ), problem jest jednak taki że podany operator nie powinna przeciążać metoda lecz zwykła funkcja z pierwszy argumentem jako referencja na obiekt klasy std::ostream a z drugim jako np. stała referencja na nasz obiekt. Wobec tego funkcja operatora&amp;lt;&amp;lt; wywołuje odpowiednią metodę wirtualną ( przeciążającą &amp;lt;&amp;lt; ) w zależności od podanego w argumencie obiektu dziedziczącego po BaseRectangle. Wszystko wygląda tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;

class BaseRectangle;
std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp;, const BaseRectangle&amp;amp;); //drugi parametr to 
//referencja typu klasy abstrakcyjnej

///---------------------------------------------------------------------------------------

class BaseRectangle { //klasa abstrakcyjna
	friend std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp;, const BaseRectangle&amp;amp;);
public:
	struct Coords { int x; int y; };
private:
	Coords pos;
public:

	BaseRectangle(int pos_x=0, int pos_y=0) : pos{ pos_x,pos_y } {}

	Coords&amp;amp; returnPos() {
		return pos;
	}

	Coords returnPos() const {
		return pos;
	}

	void move(int x, int y) {
		pos = { x,y };
	}

	virtual long area() = 0;

protected:
	virtual std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; os) const = 0; //by klasy potomne wiedzialy o istnieniu tej metody i mogły mieć jej 
//własną definicje ale by reszta programu nie miała do tej metody dostępu 

};

///---------------------------------------------------------------------------------------

class Rectangle : public BaseRectangle { //prostokąt 

	friend std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp;, const BaseRectangle&amp;amp;);

	virtual std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; os) const { //prywatna sekcja by nie moc stosować zapisu w stylu: 
//Rectangle &amp;lt;&amp;lt; cout; ( z tej metody korzysta funkcja zaprzyjaźniona )
		os &amp;lt;&amp;lt; &quot;width = &quot; &amp;lt;&amp;lt; width &amp;lt;&amp;lt; &quot;, height = &quot; &amp;lt;&amp;lt; height &amp;lt;&amp;lt; std::endl;
		os &amp;lt;&amp;lt; &quot;pos(x,y) = ( &quot; &amp;lt;&amp;lt; returnPos().x &amp;lt;&amp;lt; &quot;, &quot; &amp;lt;&amp;lt; returnPos().y &amp;lt;&amp;lt; &quot; )\n&quot;;
		return os;
	}

private:
	int width;
	int height;
public:
	Rectangle(int w=0, int h=0, int x=0, int y=0) : BaseRectangle(x,y), width(w), height(h) {}

	virtual long area() {
		return width*height;
	}
};

///---------------------------------------------------------------------------------------

class Square : public BaseRectangle { //kwadrat

	friend std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp;, const BaseRectangle&amp;amp;);

	virtual std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; os) const { //taka sama sytuacja
		os &amp;lt;&amp;lt; &quot;dimension = &quot; &amp;lt;&amp;lt; dimension &amp;lt;&amp;lt; std::endl;
		os &amp;lt;&amp;lt; &quot;pos(x,y) = ( &quot; &amp;lt;&amp;lt; returnPos().x &amp;lt;&amp;lt; &quot;, &quot; &amp;lt;&amp;lt; returnPos().y &amp;lt;&amp;lt; &quot; )\n&quot;;
		return os;
	}

private:
	int dimension;
public:

	Square(int d=0, int x=0, int y=0) : BaseRectangle(x, y), dimension(d) {}

	virtual long area() {
		return dimension*dimension;
	}

};

///---------------------------------------------------------------------------------------

std::ostream&amp;amp; operator&amp;lt;&amp;lt;(std::ostream&amp;amp; os, const BaseRectangle&amp;amp; bs) {
	bs &amp;lt;&amp;lt; os; //wywołanie prywatnej metody 
//operatora&amp;lt;&amp;lt; w zależności od podanego argumentu
	return os;
}

&lt;/pre&gt;



&lt;p&gt;Błędy kompilacji jaki mam:&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=11600264020840931721&quot; style=&quot;height:58px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;Jestem w temacie dziedziczenia jeszcze bardzo zielony, trochę tu nakombinowałem i musiałem coś zawalić, wiecie może co? Czy w ogóle dobrze myślałem/kombinowałem nad sposobem rozwiązania tego problemu?&lt;/p&gt;



&lt;p&gt;Z góry bardzo wam dziękuje za pomoc ;)&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/355248/projektowanie-klasy-abstrakcyjnej-problem-z-wirtualnym-przciazaniem-operatora</guid>
<pubDate>Sun, 03 Jun 2018 14:25:31 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatorów</title>
<link>https://forum.pasja-informatyki.pl/353259/przeciazanie-operatorow</link>
<description>

&lt;p&gt;Witam,&lt;/p&gt;



&lt;p&gt;mam problem z operatorem &quot;&amp;gt;&amp;gt;&quot; i &quot;&amp;lt;&amp;lt;&quot;. Mianowicie podczas tworzenia klasy przy kompilacji otrzymuje błędy:
&lt;br&gt;
Error&amp;nbsp;&amp;nbsp; &amp;nbsp;C2679&amp;nbsp;&amp;nbsp; &amp;nbsp;binary '&amp;lt;&amp;lt;': no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) oraz
&lt;br&gt;
Error (active)&amp;nbsp;&amp;nbsp; &amp;nbsp;E0349&amp;nbsp;&amp;nbsp; &amp;nbsp;no operator &quot;&amp;lt;&amp;lt;&quot; matches these operands&lt;/p&gt;



&lt;p&gt;Otworzyłem kody błędów w przeglądarce i wyczytałem coś o przeciążaniu operatorów ale nie wiem jak to zrobić. Można chyba skorzystać z funkcji operator ale nie wiem jak jej użyć, zresztą nie powinna być ona potrzebna do stworzenia programu. Chciałbym żeby ktoś przybliżył mi na czym polega błąd i wyjaśnił całe to przeciążanie jeśli o tym mowa. Pozdrawiam&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:plain;&quot;&gt;
void daj_glos()
	{
		if (gatunek == &quot;kot&quot;) cout &amp;lt;&amp;lt; imie &amp;lt;&amp;lt; &quot; lat&quot; &amp;lt;&amp;lt; wiek &amp;lt;&amp;lt; &quot;: miau&quot;;
		else if (gatunek == &quot;koza&quot;)  cout &amp;lt;&amp;lt; imie &amp;lt;&amp;lt; &quot; lat&quot; &amp;lt;&amp;lt; wiek &amp;lt;&amp;lt; &quot;: meee&quot;;
		else if (gatunek == &quot;krowa&quot;)  cout &amp;lt;&amp;lt; imie &amp;lt;&amp;lt; &quot; lat&quot; &amp;lt;&amp;lt; wiek &amp;lt;&amp;lt; &quot;: muuu&quot;;
		else cout &amp;lt;&amp;lt; &quot;Nieznany gatunek&quot;;
	}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/353259/przeciazanie-operatorow</guid>
<pubDate>Sun, 27 May 2018 12:22:15 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatora &gt;&gt; i &lt;&lt; dla listy</title>
<link>https://forum.pasja-informatyki.pl/344704/przeciazanie-operatora-i-dla-listy</link>
<description>

&lt;p&gt;Cześć,&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Tak jak w temacie... Operator wyjścia chyba jest dla mnie jasny, bo ma za zadanie wypisanie tego, co znajduje się wewnątrz listy, czyli mógłbym tam umieścić funkcję printList(), której kod poniżej? A co z operatorem wejścia? Nie bardzo wiem, co taki operator ma robić, skoro mam metodę addFirstNode - która dodaje element do listy. Mógłby ktoś podpowiedzieć w tej sprawie?&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
    void printlist(){
        Node *tmp = new Node;
        tmp = head;
        while(tmp != NULL){
            cout &amp;lt;&amp;lt; tmp-&amp;gt;data &amp;lt;&amp;lt; &quot;\t&quot;;
            tmp = tmp-&amp;gt;next;
        }
    }

    void addFirstNode(int value){
        Node *tmp = new Node;
        tmp-&amp;gt;data = value;
        tmp-&amp;gt;next = head;
        head = tmp;
    }&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/344704/przeciazanie-operatora-i-dla-listy</guid>
<pubDate>Thu, 19 Apr 2018 16:17:26 +0000</pubDate>
</item>
<item>
<title>przeciążanie funkcji w c++ - pytanie</title>
<link>https://forum.pasja-informatyki.pl/332603/przeciazanie-funkcji-w-c-pytanie</link>
<description>

&lt;p&gt;Witam, mam takie proste i śmieszne funkcje:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void show(int a) {
	std::cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; std::endl;
}

void show(double a) {
    std::cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; std::endl;
}

void show(char str[]) {
	std::cout &amp;lt;&amp;lt; str &amp;lt;&amp;lt; std::endl;
}
&lt;/pre&gt;



&lt;p&gt;W zależności od argumentów wywołamy funkcje o odpowiedniej sygnaturze. Albo dla parametru &lt;span style=&quot;color:#008080&quot;&gt;char[]&lt;/span&gt;, &lt;span style=&quot;color:#008080&quot;&gt;double a&lt;/span&gt; czy &lt;span style=&quot;color:#008080&quot;&gt;int a &lt;/span&gt;(wiem że może to wszystko nie ma większego sensu ale chce zademonstrować o co mi chodzi). Wywołajmy ją tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
long int x = 10;
show(x);

//taki sam efekt da:

show(10l); 

//funkcja wywoła się dla parametru typu int &lt;/pre&gt;



&lt;p&gt;To że tu mamy long int a nie int w niczym nie przeszkadza. W sumie nie trudno się domyślić że w argumencie podajemy wartość różną od double oraz char* . Dlaczego zatem:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
unsigned int x = 10; 

show(x); 

//oraz 

show(10u);

&lt;/pre&gt;



&lt;p&gt;to wywołanie powoduje już błąd że wiele funkcji przeciążonych jest zgodnych z listą argumentów?&lt;/p&gt;



&lt;p&gt;Dlaczego dla typu &lt;span style=&quot;color:#008080&quot;&gt;long int&lt;/span&gt; kompilator mógł się zdecydować a dla &lt;span style=&quot;color:#008080&quot;&gt;unsigned int&lt;/span&gt; już nie?&lt;/p&gt;



&lt;p&gt;Podawałem też w argumentach typy &lt;span style=&quot;color:#008080&quot;&gt;short&lt;/span&gt;. &lt;span style=&quot;color:#008080&quot;&gt;long long&lt;/span&gt; i nie było żadnego problemu...&lt;/p&gt;



&lt;p&gt;Serdecznie dziękuje za wytłumaczenie ;)&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/332603/przeciazanie-funkcji-w-c-pytanie</guid>
<pubDate>Tue, 06 Mar 2018 19:49:08 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatora ostream dla klasy szablonowej</title>
<link>https://forum.pasja-informatyki.pl/320528/przeciazanie-operatora-ostream-dla-klasy-szablonowej</link>
<description>

&lt;p&gt;Jestem w trakcie tworzenia projektu w którym mam do wykonania klasę szablonową opartą na kontenerze Vector, oraz dwie klasy: bazową i dziedziczącą po niej klasę pomocniczą. Klasa A (bazowa) 3 stringi tak samo jak klasa pomocnicza B (w taki sposób że przy wywołaniu klasy B wyświetla się 6 stringów).&lt;/p&gt;



&lt;p&gt;Klasa A:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
class A 
{
protected:
	string jedenA, dwaA, trzyA;
public:
	A(string jeden, string dwa, string trzy);
	A(){}
	virtual void show(ostream&amp;amp; os) const
	{
		os &amp;lt;&amp;lt; jedenA &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; dwaA &amp;lt;&amp;lt; &quot; | &quot; &amp;lt;&amp;lt; trzyA &amp;lt;&amp;lt; endl;
	}
};&lt;/pre&gt;



&lt;p&gt;Klasa B:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
class B : public A{
	string jedenB, dwaB, trzyB;
public:
	B(string mdwa, string mjeden, string zero, string jeden, string dwa, string trzy);
	void show(ostream&amp;amp; os) const
	{
		os &amp;lt;&amp;lt; A::jedenA &amp;lt;&amp;lt;&quot; &quot;&amp;lt;&amp;lt; A::dwaA &amp;lt;&amp;lt; &quot; | &quot; &amp;lt;&amp;lt; A::trzyA &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; jedenB &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; dwaB &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; trzyB &amp;lt;&amp;lt; endl;
	}};&lt;/pre&gt;



&lt;p&gt;Klasa Kontener jest klasą szablonową i zawiera metodę&amp;nbsp;dodaj (dodaje obiekt A lub B do vectora) oraz przeciążony operator ostream:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
template &amp;lt;typename T&amp;gt;
class Kontener
{
	vector&amp;lt;T&amp;gt; pojemnik;
public:
	void dodaj(const T AlubB) {pojemnik.push_back(AlubB);};
	friend ostream&amp;amp; operator&amp;lt;&amp;lt;(ostream&amp;amp; os, const Kontener&amp;lt;T&amp;gt;&amp;amp; k)
	{
        for (int i = 0; i &amp;lt; k.pojemnik.size(); ++i)
		{
               os &amp;lt;&amp;lt; k.pojemnik[i]; 
        }
	return os; 
    }
};&lt;/pre&gt;



&lt;p&gt;W programie głównym utworzyłem zmienną typu Kontener&amp;lt;A*&amp;gt; żeby umożliwić dodawanie do vectora obiektów A lub B. W skrócie wygląda to w ten sposób:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
int main()
{
	Kontener&amp;lt;A*&amp;gt; kont;
    kont.dodaj(new A(str1, str2, str3));
	kont.dodaj(new B(str1, str2, str3, str4, str5, str6));

    cout &amp;lt;&amp;lt; kont &amp;lt;&amp;lt;endl;
    return 0;
}&lt;/pre&gt;



&lt;p&gt;Problem jest z operatorem. Mianowicie nie wyświetla on wartości ukrytych pod wskaźnikiem tylko adresy wskaźników. W jaki sposób zmienić operator ostream z klasy Kontener (bo podejrzewam że w tym miejscu siedzi problem) tak żeby wyświetlały si wartości? Czy jest możliwość dostania się do metody show z klasy A i B w tym operatorze ostream?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/320528/przeciazanie-operatora-ostream-dla-klasy-szablonowej</guid>
<pubDate>Mon, 22 Jan 2018 12:07:04 +0000</pubDate>
</item>
<item>
<title>przeciążanie operatora</title>
<link>https://forum.pasja-informatyki.pl/310959/przeciazanie-operatora</link>
<description>

&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=14633995751646646612&quot; style=&quot;height:385px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;Stworzyłam częściowe rozwiązania jednak nie do końca potrafię połączyć to w całość. Dziękuje za pomoc.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
int main()
{
    const x = 5;

    int tablicaA[ 5 ];
    for( int i = 0; i &amp;lt; 5; i++ )
    {
        cout &amp;lt;&amp;lt; &quot;element &quot; &amp;lt;&amp;lt;( i + 1 ) &amp;lt;&amp;lt; &quot;: &quot;;
        cin &amp;gt;&amp;gt; tablicaA[ i ];
    }
    for( int i = 0; i &amp;lt; 5; i++ )
    {
        cout &amp;lt;&amp;lt; &quot;element tablicy &quot; &amp;lt;&amp;lt; tablicaA[ i ] &amp;lt;&amp;lt; endl;
    }
    int tablicaB[ 4 ];
    for( int i = 0; i &amp;lt; 4; i++ )
    {
        cout &amp;lt;&amp;lt; &quot;element &quot; &amp;lt;&amp;lt;( i + 1 ) &amp;lt;&amp;lt; &quot;: &quot;;
        cin &amp;gt;&amp;gt; tablicaB[ i ];
    }
    for( int i = 0; i &amp;lt; 4; i++ )
    {
        cout &amp;lt;&amp;lt; &quot;element tablicy &quot; &amp;lt;&amp;lt; tablicaB[ i ] &amp;lt;&amp;lt; endl;
    }
    int suma[ 4 ];
    for( int i = 0; i &amp;lt; 4; i++ )
    {
        suma[ i ] = tablicaA[ i ] + tablicaB[ i ];
        cout &amp;lt;&amp;lt; &quot;suma elementu tablicy &quot; &amp;lt;&amp;lt;( i + 1 ) &amp;lt;&amp;lt; &quot; wynosi: &quot; &amp;lt;&amp;lt; suma[ i ] &amp;lt;&amp;lt; endl;
    }
    getch();
    return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
void Odejmijx(){
    for(int i = 0; i &amp;lt; n; ++i) {
      tab[i] = i - x;
      cout &amp;lt;&amp;lt; tab[i] &amp;lt;&amp;lt; endl;
    }
}

void Odejmij1(){
    for(int i = 0; i &amp;lt; n; ++i) {
      tab[i] = i - 1;
      cout &amp;lt;&amp;lt; tab[i] &amp;lt;&amp;lt; endl;
    }
}

void Dodajx(){
    for(int i = 0; i &amp;lt; n; ++i) {
      tab[i] = i + x;
      cout &amp;lt;&amp;lt; tab[i] &amp;lt;&amp;lt; endl;
    }
}

void Dodajx(){
    for(int i = 0; i &amp;lt; n; ++i) {
      tab[i] = i + 1;
      cout &amp;lt;&amp;lt; tab[i] &amp;lt;&amp;lt; endl;
    }
}


void Dodajx(){
    for(int i = 0; i &amp;lt; n; ++i) {
      tab[i] = i + 1;
      cout &amp;lt;&amp;lt; tab[i] &amp;lt;&amp;lt; endl;
    }
}
//operator zwraca tablicę jak przed wykonaniem dodawania
void Dodaj1a++(){
    for(int i = 0; i &amp;lt; n; ++i) {
      tab[i] = i++;
      cout &amp;lt;&amp;lt; tab[i] &amp;lt;&amp;lt; endl;
    }
}
&lt;/pre&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
class tablica{
    public:
//f. alokuj¹ca pamieæ dla tabl. Jednowymiarow¹ int
int* tablica(int r);
//f. wype³niajaca tabliê
void fibo(int *t, int r);
// f. drukuj¹ca tablicê jednowymiarow¹ int na ekran
void  druk(int *t, int r);

void Print();

void Odejmijx();

void Odejmij1();

void Dodajx();

void Dodaj1();

void Dodaja++();

void Dodaja--();
    private:
        
};&lt;/pre&gt;



&lt;p&gt;Zdefiniowałam klasę w której są deklarację funkcji, czy powinnam coś umieścić w sekcji private?&lt;/p&gt;



&lt;p&gt;Jak zdefiniować tablicę A i B a póżniej tylko na nich działać poprzeż dodawanie 1 lub x, itd.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/310959/przeciazanie-operatora</guid>
<pubDate>Wed, 13 Dec 2017 19:38:38 +0000</pubDate>
</item>
<item>
<title>niejednoznaczna przeciążona funkcja z szablonami</title>
<link>https://forum.pasja-informatyki.pl/292689/niejednoznaczna-przeciazona-funkcja-z-szablonami</link>
<description>

&lt;p&gt;Witam, jak mogę przerobić którąś z deklaracji, aby zawsze gdy podam&amp;nbsp;NotAlwaysCountable wywoływała się pierwsza funkcja?&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
template&amp;lt;typename ReturnType, typename Type, typename... Args&amp;gt;
ReturnType average(const NotAlwaysCountable&amp;lt;Type&amp;gt; &amp;amp;value, Args... nextArgs);

template&amp;lt;typename ReturnType, typename Type, typename... Args&amp;gt;
ReturnType average(const Type &amp;amp;value, Args... nextArgs);&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/292689/niejednoznaczna-przeciazona-funkcja-z-szablonami</guid>
<pubDate>Tue, 10 Oct 2017 18:32:57 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatora &gt;&gt;</title>
<link>https://forum.pasja-informatyki.pl/261045/przeciazanie-operatora</link>
<description>

&lt;pre class=&quot;brush:cpp;&quot;&gt;
    istream&amp;amp; operator&amp;gt;&amp;gt;(istream &amp;amp;input ,Game &amp;amp;Match)
    {
        cout&amp;lt;&amp;lt;&quot;dzialam&quot;;
        input.clear();
        input.ignore(std::numeric_limits&amp;lt;std::streamsize&amp;gt;::max(), '\n');
        input&amp;gt;&amp;gt;Match.pick;
        return input;
    }&lt;/pre&gt;



&lt;p&gt;Chcę przeciążyć operator wejścia w taki sposób żeby za każdym razem czyściło mi jego zawartość przed jego użyciem. Czy ten kod jest poprawnie napisany? Kod się kompiluje ale nie zauważyłem jego obecności w kodzie :/&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Game u mnie to klasa w której chce przeciążyć operator a Match to jej obiekt&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/261045/przeciazanie-operatora</guid>
<pubDate>Sat, 10 Jun 2017 14:26:05 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatora jednoargumentowego</title>
<link>https://forum.pasja-informatyki.pl/255746/przeciazanie-operatora-jednoargumentowego</link>
<description>

&lt;p&gt;Witam,&lt;/p&gt;



&lt;p&gt;Mam pewien problem ze zrozumieniem pewniej rzeczy. Otóż przeciążyłem argument jednoargumentowy:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot; title=&quot;*h&quot;&gt;
Zespolona operator- ();&lt;/pre&gt;



&lt;pre class=&quot;brush:cpp;&quot; title=&quot;*.cpp&quot;&gt;
Zespolona Zespolona::operator- ()
{
	return Zespolona(-this-&amp;gt;re, -this-&amp;gt;im);
	
}&lt;/pre&gt;



&lt;p&gt;I gdy stworzą obiekt z1, a następnie chciałbym zmienić wartość liczby na ujemną tym sposobem nie działa:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot; title=&quot;main.cpp&quot;&gt;
//stworzenie obiektu z1;

-z1; 
std::cout  &amp;lt;&amp;lt;  z1;

std::cout &amp;lt;&amp;lt; -z1 // &amp;lt;---- tym sposobem dziala&lt;/pre&gt;



&lt;p&gt;Wydaję mi się, że to przez to iż funkcja nie działa&amp;nbsp;na oryginalnym obiekcie. W jaki sposób można sprawić, że ten sposób zadziała? O ile w ogóle można. :)&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/255746/przeciazanie-operatora-jednoargumentowego</guid>
<pubDate>Mon, 22 May 2017 15:18:06 +0000</pubDate>
</item>
<item>
<title>Przeciazenia c++</title>
<link>https://forum.pasja-informatyki.pl/243662/przeciazenia-c</link>
<description>Dzien dobry chcialem zapytac ktore operatory musza byc zapezyjaznione dla przeciazenia</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/243662/przeciazenia-c</guid>
<pubDate>Wed, 12 Apr 2017 07:32:17 +0000</pubDate>
</item>
<item>
<title>Przeładowanie operatorów c++</title>
<link>https://forum.pasja-informatyki.pl/236474/przeladowanie-operatorow-c</link>
<description>Piszę ostatnio klasę z przeciążonym operatorem = i kompilator oddaje błąd &amp;quot;funkcja operator = może miec tylko jeden argument&amp;quot; &amp;nbsp;&amp;nbsp;o co chodzi chyba operator 'równa się' powinien mieć dwa argumenty jeden z przodu drugi z tyłu???</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/236474/przeladowanie-operatorow-c</guid>
<pubDate>Sat, 18 Mar 2017 20:37:29 +0000</pubDate>
</item>
<item>
<title>Kiedy nie musimy przeciążać operatora przypisania(&quot;=&quot;)? </title>
<link>https://forum.pasja-informatyki.pl/233064/kiedy-nie-musimy-przeciazac-operatora-przypisania-%C2%A0</link>
<description>Witam. &amp;nbsp;Kiedy nie musimy przeciążać operatora przypisania(&amp;quot;=&amp;quot;)?. Wydaje mi się, że wtedy kiedy nie tworzymy obiektów, bo w przypadku przypisania nadpisywany obiekt może mieć jakieś dane (wskaźniki) które trzeba ręcznie posprzątać . Nie jestem pewien czy dobrze myślę. Proszę o pomoc</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/233064/kiedy-nie-musimy-przeciazac-operatora-przypisania-%C2%A0</guid>
<pubDate>Mon, 06 Mar 2017 18:44:29 +0000</pubDate>
</item>
<item>
<title>C++ Przeciążanie funkcji Odczytywania pliku</title>
<link>https://forum.pasja-informatyki.pl/231524/c-przeciazanie-funkcji-odczytywania-pliku</link>
<description>

&lt;p&gt;Chciał bym przeciążyć metodę FileReader tak by wersja z argumentem path&amp;nbsp; działała&amp;nbsp;
&lt;br&gt;

&lt;br&gt;
Oczywiscie chodzi że kod sie nie kompiluje i nie wiem czemu nie przyjmuje funkcja &quot;reader&quot; w funkcji &quot;FileReader&quot; nie przyjmuje argumentu path i kod sie wywala&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &amp;lt;windows.h&amp;gt;

using namespace std;
void FileReaderText(){



}
void FileReader(){
    ifstream reader;
    cout&amp;lt;&amp;lt;&quot;zosta³ wczytany plik&quot;&amp;lt;&amp;lt;endl;
    reader.open(&quot;C:/Users\Burdello-BumBum\Desktop\LoremIpsum.txt&quot;);
    if(reader.good()){
        cout&amp;lt;&amp;lt;&quot;otworzono plik&quot;&amp;lt;&amp;lt;endl;
    } else {
        cout&amp;lt;&amp;lt;&quot;Nie udalo sie otworzyc pliku&quot;&amp;lt;&amp;lt;endl;
    }
}
void FileReader(string path){

    ifstream reader;
    reader.open(path);

}

int main(char* cos[])
{


    return 0;
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/231524/c-przeciazanie-funkcji-odczytywania-pliku</guid>
<pubDate>Wed, 01 Mar 2017 19:18:28 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatorów WinApi</title>
<link>https://forum.pasja-informatyki.pl/220719/przeciazanie-operatorow-winapi</link>
<description>Przeciążyłem operator &amp;lt;&amp;lt; tak, że jeśli po jego lewej stronie stoi argument typu HWND, a po prawej string to do istniejącego tekstu jest dopisywany ten string. Stworzyłem zatem okienkowy odpowiednik cout żeby ułatwić sobie pracę. Mam w związku z tym kilka pytań&lt;br /&gt;
&lt;br /&gt;
1. W Symfonii C++ jest napisane, że nie można przeciążać operatora dla samych typów wbudowanych, co najmniej jeden argument funkcji operatorowej musi być typu zdefiniowanego przez programistę (BTW czy może to być np. struktura, a nie klasa?). Mój program działa, bo string nie jest typem wbudowanym, ale co gdybym użył zamiast stringa np. int? Wiem, że mógłbym sam sprawdzić, ale chwilowo nie mam dostępu do komputera z projektami i kompilatorem, a bardzo mnie to ciekawi. Czy zmienne z biblioteki WinApi są typami wbudowanymi?&lt;br /&gt;
&lt;br /&gt;
2. Przeciążać nie można podobno dla typów wbudowanych bo definicje takich funkcji operatorowych podobno gdzieś już są (Symfonia wydanie 3 str 712). Ale w przypisie jest napisane, że trochę to tłumaczenie naciągane. O co w tym chodzi? Co gdybym przeładował np. operator * , a funkcja przyjmowała by np. floata i chara? Są wbudowane, ale chyba nie istnieje taka funkcji operatorowa, więc zadziałałoby czy nie i dlaczego? Chcę się trochę więcej dowiedzieć, zanim zacznę pisać własną bibliotekę &amp;quot;winoperators.h&amp;quot;.</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/220719/przeciazanie-operatorow-winapi</guid>
<pubDate>Fri, 27 Jan 2017 13:20:10 +0000</pubDate>
</item>
<item>
<title>przeciążone operatory - obiektowy C++</title>
<link>https://forum.pasja-informatyki.pl/202883/przeciazone-operatory-obiektowy-c</link>
<description>

&lt;p&gt;Witam. Mam pytanie co do tego kodu:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;

using namespace std;

class Konto_Bankowe
{
private:
    string nazwa_konta;
    double stan_konta;
public:
    Konto_Bankowe();
    Konto_Bankowe(string nazwa, int hajs);
    ~Konto_Bankowe();
    Konto_Bankowe operator+(const Konto_Bankowe &amp;amp; suma) const; //dodawanie obiekt + obiekt
    friend ostream &amp;amp; operator&amp;lt;&amp;lt;(ostream &amp;amp; os, const Konto_Bankowe &amp;amp; stan);
};

Konto_Bankowe::Konto_Bankowe()
{
    nazwa_konta = &quot;brak nazwy&quot;;
    stan_konta = 0;
}

Konto_Bankowe::Konto_Bankowe(string nazwa, int hajs)
{
    nazwa_konta = nazwa;
    stan_konta = hajs;
}

Konto_Bankowe::~Konto_Bankowe()
{
}

Konto_Bankowe Konto_Bankowe::operator+(const Konto_Bankowe &amp;amp; suma) const
{
    Konto_Bankowe sumowanie;
    sumowanie.stan_konta = stan_konta + suma.stan_konta;
    return sumowanie;
}

ostream &amp;amp; operator&amp;lt;&amp;lt;(ostream &amp;amp; os, const Konto_Bankowe &amp;amp; stan)
{
    os &amp;lt;&amp;lt; &quot;Nazwa konta: &quot; &amp;lt;&amp;lt; stan.nazwa_konta &amp;lt;&amp;lt; &quot;, stan tego konta wynosi: &quot; &amp;lt;&amp;lt; stan.stan_konta &amp;lt;&amp;lt; &quot;.&quot;;
    return os;
}

int main()
{
    Konto_Bankowe obiekt1(&quot;Wp.pl&quot;, 8000);
    Konto_Bankowe obiekt2(&quot;Onet.pl&quot;, 4000);

    obiekt1 = obiekt1 + obiekt2;

    cout &amp;lt;&amp;lt; obiekt1 &amp;lt;&amp;lt; endl;

    return 0;
}

&lt;/pre&gt;



&lt;p&gt;Mamy tutaj klasę Konto_Bankowe. W klasie tej korzystamy z dwóch metod przeciążających operatory. W funkcji main najpierw dodajemy dwa obiekty do siebie &lt;strong&gt;obiekt1 = obiekt1 + obiekt2;&lt;/strong&gt; a następnie wyświetlamy nasz wynik dodawania: &lt;strong&gt;cout &amp;lt;&amp;lt; obiekt1 &amp;lt;&amp;lt; endl;&lt;/strong&gt;. Po skompilowaniu otrzymujemy: &lt;strong&gt;Nazwa konta: &lt;span style=&quot;color:#ff0000&quot;&gt;brak nazwy&lt;/span&gt;, stan tego konta wynosi: &lt;span style=&quot;color:#ff0000&quot;&gt;12000&lt;/span&gt;.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Moje pytanie: Dlaczego wynik dodawania jest wyświetlany poprawnie, wynosi on 12000, zaś nazwa to &lt;strong&gt;brak nazwy&lt;/strong&gt; skoro nazwa dla &lt;strong&gt;obiekt1&lt;/strong&gt; to &lt;strong&gt;Wp.pl&lt;/strong&gt;? W jaki sposób można sprawić, aby zamiast &lt;strong&gt;brak nazwy&lt;/strong&gt; było napisane &lt;strong&gt;Wp.pl&lt;/strong&gt;?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/202883/przeciazone-operatory-obiektowy-c</guid>
<pubDate>Sun, 04 Dec 2016 14:06:23 +0000</pubDate>
</item>
<item>
<title>C++ przeciążanie operatora dodawania dla klasy String.</title>
<link>https://forum.pasja-informatyki.pl/200447/c-przeciazanie-operatora-dodawania-dla-klasy-string</link>
<description>

&lt;p&gt;Hej, mam problem z przeciążeniem operatora dodawania dla własnej klasy String.&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
class String
{
private:
    char * str;
    int len;
    static int num_strings;
    static const int CINLIM = 80;
public:
    String(const char * s);
    String();
    String(const String &amp;amp;);
    ~String();
    int length () const {return len;}
    String &amp;amp; operator=(const String &amp;amp;);
    String &amp;amp; operator=(const char *);
    char &amp;amp; operator[](int i) const;
    friend bool operator&amp;lt;(const String &amp;amp; st1, const String &amp;amp; st2);
    friend bool operator&amp;gt;(const String &amp;amp; st1, const String &amp;amp; st2);
    friend bool operator==(const String &amp;amp;st1, const String  &amp;amp; st2);
    friend ostream &amp;amp; operator&amp;lt;&amp;lt;(ostream &amp;amp; os, const String &amp;amp; st);
    friend istream &amp;amp; operator&amp;gt;&amp;gt;(istream &amp;amp; is, String &amp;amp; st);
    static int HowMany();
    friend String operator+(const String &amp;amp; st1, const String &amp;amp; st2);
    String &amp;amp; stringlow();
};&lt;/pre&gt;



&lt;p&gt;Przeciążenie operatora dodawania:&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
String operator+(const String &amp;amp; st1, const String &amp;amp; st2)
{
    int length = st1.len + st2.len;
    char * str = new char[length + 1];

    for(int i = 0; i &amp;lt; st1.len; i++)
        str[i] = st1.str[i];

    for(int i = st1.len, j = 0; i &amp;lt; length; i++, j++)
        str[i] = st2.str[j];

    String s(str);
    delete [] str;

    return s;
}&lt;/pre&gt;



&lt;p&gt;Funkcja main:&lt;/p&gt;



&lt;pre class=&quot;brush:as3;&quot;&gt;
int main()
{
    String napis1 = &quot;korea&quot;;
    String napis2 = &quot;huhuha&quot;;
    String napis3 = napis1 + napis2;
    cout &amp;lt;&amp;lt; napis1+napis2 &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; napis3 &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;hmm&quot; + napis1 &amp;lt;&amp;lt; endl;

    return 0;
}&lt;/pre&gt;



&lt;p&gt;Wynik:&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=6840998695798478784&quot; style=&quot;height:106px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;W ostatniej linijce powinno być hmmkorea, a jest hmmkoreauha, z czego to wynika? Wewnątrz funkcji używam operatora delete [] str, a mimo to coś jest nie tak.&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/200447/c-przeciazanie-operatora-dodawania-dla-klasy-string</guid>
<pubDate>Sat, 26 Nov 2016 15:03:16 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatora</title>
<link>https://forum.pasja-informatyki.pl/160043/przeciazanie-operatora</link>
<description>

&lt;p&gt;Mam taki kod &amp;nbsp;i nie mogę poradzić sobię z przeciążaniem operatora, pomoże ktoś?&lt;/p&gt;



&lt;p&gt;Ostatni podpunkt zadania.&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

class TKwota{

private:
    unsigned int zlote;
    unsigned int grosze;

public:

    TKwota()
    {
        zlote = 0;
        grosze = 0;
    }
    TKwota(int a, int b)
    {
        if(b&amp;gt;100)
        {
            zlote = a+(b/100);
            grosze = a%100;
        }
        else
        {
            zlote = a;
            grosze = b;
        }
    }
    void Wyswietl()
    {
        cout&amp;lt;&amp;lt;zlote;
        cout&amp;lt;&amp;lt;grosze;
    }
    void Zwieksz(int c, int d)
    {
        zlote = zlote + c;
        grosze = grosze + d;
    }
    
//tutaj przeciazanie

};


int main()
{
    
    return 0;
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://zapodaj.net/images/79cb1c68b9625.png&quot; style=&quot;height:414px; width:301px&quot;&gt;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/160043/przeciazanie-operatora</guid>
<pubDate>Wed, 20 Jul 2016 14:22:41 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatora wejścia</title>
<link>https://forum.pasja-informatyki.pl/148654/przeciazanie-operatora-wejscia</link>
<description>

&lt;p&gt;Mam napisać operator, który pobierze 3 liczby w postaci: &lt;strong&gt;[c,b,a] np [5.4 , 4, 45.3],&lt;/strong&gt; kod wygląda tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
istream &amp;amp; operator &amp;gt;&amp;gt; (istream &amp;amp; we, Trojmian &amp;amp;troj)
{

   if(we.peek() != '[' )
        we.setstate(ios_base::failbit); //reczne psucie operatora
    we &amp;gt;&amp;gt; troj.c_;

    if(we.peek() != ',' )  //sprawdzam czy  znak to &quot;,&quot;, ale go nie pobieram
        we.setstate(ios_base::failbit);
    we &amp;gt;&amp;gt; troj.b_;

    if(we.peek() != ',' )
        we.setstate(ios_base::failbit);
    we &amp;gt;&amp;gt; troj.a_;

    if(we.peek() != ']' )
        we.setstate(ios_base::failbit);



    if(!we)
        cerr &amp;lt;&amp;lt; &quot;Napotkano blad przy wczytywaniu!&quot; &amp;lt;&amp;lt; endl;
    return we;
}&lt;/pre&gt;



&lt;p&gt;ale to nie działa, nie mam pojęcia dlaczego, co ciekawsze, taki kod działa:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
istream &amp;amp; operator &amp;gt;&amp;gt; (istream &amp;amp; we, Trojmian &amp;amp;troj)
{
    we &amp;gt;&amp;gt; troj.c_;

    if(we.peek() != '+' )  //sprawdzam czy  znak to &quot;,&quot;, ale go nie pobieram
        we.setstate(ios_base::failbit);
    we &amp;gt;&amp;gt; troj.b_;

    if(we.peek() != '+' )
        we.setstate(ios_base::failbit);
    we &amp;gt;&amp;gt; troj.a_;

    if(we.peek() != ']' )
        we.setstate(ios_base::failbit);



    if(!we)
        cerr &amp;lt;&amp;lt; &quot;Napotkano blad przy wczytywaniu!&quot; &amp;lt;&amp;lt; endl;
    return we;
}&lt;/pre&gt;



&lt;p&gt;ale jeśli &quot;+&quot; zamienię&amp;nbsp;na &quot;,&quot; to już nie działa.... wie ktoś co tu jest grane???&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Z góry dzięki!&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/148654/przeciazanie-operatora-wejscia</guid>
<pubDate>Wed, 08 Jun 2016 10:57:46 +0000</pubDate>
</item>
<item>
<title>Przeciążanie operatorów wyjścia i dodawania (programowanie obiektowe)</title>
<link>https://forum.pasja-informatyki.pl/137401/przeciazanie-operatorow-wyjscia-i-dodawania-programowanie-obiektowe</link>
<description>

&lt;p&gt;Dzień dobry! Mam do napisania kod w oparciu o programowanie obiektowe,&amp;nbsp;który będzie dokonywał działań&amp;nbsp;dodawania, odejmowania, mnożenia (itp.) na wektorach. Napisałem już zaczątek kodu, tzn. konstruktor, konstruktor kopiujący, destruktor, operator wyjścia, jednak napotkałem problem przy przeciążaniu operatora dodawania.
&lt;br&gt;
Proszę o pomoc w wyjaśnieniu co powoduje następujący błąd:
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
\main.cpp|10|error: no match for 'operator&amp;lt;&amp;lt;' in 'std::operator&amp;lt;&amp;lt; &amp;lt;std::char_traits&amp;lt;char&amp;gt; &amp;gt;((* &amp;amp; operator&amp;lt;&amp;lt;((* &amp;amp; std::operator&amp;lt;&amp;lt; &amp;lt;std::char_traits&amp;lt;char&amp;gt; &amp;gt;((* &amp;amp; operator&amp;lt;&amp;lt;((* &amp;amp; std::cout), (* &amp;amp; v1))), ((const char*)&quot; +  &quot;))), (* &amp;amp; v2))), ((const char*)&quot; = &quot;)) &amp;lt;&amp;lt; Wektor::operator+(Wektor&amp;amp;)((* &amp;amp; v2))'|&lt;/pre&gt;



&lt;p&gt;Kod algebra.h&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#ifndef algebra_h
#define algebra_h

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;ctime&amp;gt;

using namespace std;

class Wektor
{
   private:
      int szerokosc;
      int *tablica;

   public:
      Wektor(int);                                  // Konstruktor
      Wektor(Wektor&amp;amp;);                              // Konstruktor kopiujacy
      ~Wektor();                                    // Destruktor
      Wektor&amp;amp; operator= (Wektor&amp;amp;);                  // Przypisywanie
      Wektor operator+ (Wektor&amp;amp;);                   // Dodawanie
      Wektor operator- (Wektor&amp;amp;);                   // Odejmowanie
      Wektor operator* (Wektor&amp;amp;);                   // Mnozenie
      bool operator== (Wektor&amp;amp;);                    // Rownosc
      bool operator!= (Wektor&amp;amp;);                    // Sprzecznosc
      int operator[] (Wektor&amp;amp;);                     // Indeksowanie
      friend ostream&amp;amp; operator&amp;lt;&amp;lt; (ostream&amp;amp;,Wektor&amp;amp;);// Wyswietlanie
      friend istream&amp;amp; operator&amp;gt;&amp;gt; (istream&amp;amp;,Wektor&amp;amp;);// Wczytywanie
      Wektor&amp;amp; operator+= (Wektor&amp;amp;);                 // Zwiększanie
      Wektor&amp;amp; operator-= (Wektor&amp;amp;);                 // Zmniejszanie
      Wektor&amp;amp; operator*= (int);                     // Wielokrotność
};

#endif&lt;/pre&gt;



&lt;p&gt;Kod algebra.cpp
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;algebra.h&quot;

Wektor::Wektor(int s)
{
   if(s&amp;lt;1)
   {
      cout &amp;lt;&amp;lt; &quot;Nieprawidlowe wartosci wektora &quot;;
      cout &amp;lt;&amp;lt; &quot;. Zostanie utworzony wektor zerowy. &quot; &amp;lt;&amp;lt; endl;
      szerokosc=0;
      tablica=NULL;
   }
   else
   {
      szerokosc=s;
      tablica=new int[szerokosc];
      for(int i=0;i&amp;lt;szerokosc;i++)
      {
      tablica[i]=(rand()%10)+0;
      }
   }
}

Wektor::Wektor(Wektor&amp;amp; v)
{
   if(v.szerokosc&amp;lt;1)
   {
      cout &amp;lt;&amp;lt; &quot;Nieprawidlowe wartosci wektora &quot;;
      cout &amp;lt;&amp;lt; &quot;. Zostanie utworzony wektor zerowy. &quot; &amp;lt;&amp;lt; endl;
      szerokosc=0;
      tablica=NULL;
   }
   else
   {
      szerokosc=v.szerokosc;
      tablica=new int[szerokosc];
      for(int i=0;i&amp;lt;szerokosc;i++)
      {
      tablica[i]=v.tablica[i];
      }
   }
}

Wektor::~Wektor()
{
   delete [] tablica;
}

Wektor&amp;amp; Wektor::operator= (Wektor&amp;amp; v)
{
   if(this==&amp;amp;v) return *this;
   if(v.szerokosc==0)
   {
      szerokosc=0;
      delete [] tablica;
      tablica=NULL;
   }
   else
   {
      delete [] tablica;
      szerokosc=v.szerokosc;
      tablica=new int[szerokosc];
      for(int i=0;i&amp;lt;szerokosc;i++)
      {
         tablica[i]=v.tablica[i];
      }
   }
   return *this;
}

Wektor Wektor:: operator+ (Wektor&amp;amp; v)
{
   if(v.szerokosc==0) return *this;
   if(szerokosc==0) return v;
   Wektor w(szerokosc);
   if(szerokosc==v.szerokosc)
   {
      for(int i=0;i&amp;lt;szerokosc;i++)
      {
         w.tablica[i]+=tablica[i];
         w.tablica[i]+=v.tablica[i];
      }
   }
   return w;
}

std::ostream&amp;amp; operator &amp;lt;&amp;lt; (ostream&amp;amp; wyjscie,Wektor&amp;amp; v)
{
   {
      wyjscie &amp;lt;&amp;lt; &quot;[ &quot;;
      for(int i=0;i&amp;lt;v.szerokosc;i++) wyjscie &amp;lt;&amp;lt; v.tablica[i] &amp;lt;&amp;lt; &quot; &quot;;
      wyjscie &amp;lt;&amp;lt; &quot;] &quot;;
   }
   return wyjscie;
}&lt;/pre&gt;



&lt;p&gt;Kod main.cpp&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &quot;algebra.h&quot;

int main()
{
   int mnoznik;
   srand(time(NULL));
   Wektor v1(5),v2(5);
   system(&quot;cls&quot;);
   cout&amp;lt;&amp;lt;&quot;Wektory 5-wymiarowe:&quot;&amp;lt;&amp;lt;'\t'&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;'\t'&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; +  &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;v1+v2&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; -  &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; *  &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; == &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; != &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; += &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; -= &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; *= &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; [] &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;&amp;lt;&amp;lt;endl;
   cout&amp;lt;&amp;lt;v1&amp;lt;&amp;lt;&quot; &amp;lt;- &quot;&amp;lt;&amp;lt;v2&amp;lt;&amp;lt;&quot; = &quot;; v1=v2; cout&amp;lt;&amp;lt;v1; getchar();
   return 0;
}
&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/137401/przeciazanie-operatorow-wyjscia-i-dodawania-programowanie-obiektowe</guid>
<pubDate>Wed, 04 May 2016 12:32:49 +0000</pubDate>
</item>
<item>
<title>Nadpisywanie operatora '+' w klasie ze zmiennymi dynamicznymi</title>
<link>https://forum.pasja-informatyki.pl/135919/nadpisywanie-operatora-w-klasie-ze-zmiennymi-dynamicznymi</link>
<description>

&lt;p&gt;Chcę zrobić klasę przechowującą duże liczby, używam do tego dynamicznej tablicy znaków. Chcę nadpisać operator dodawania ale w destruktorze dealokuje tablicę znaków co powoduje że nie mogę zwrócić zmiennej ze stosu bo jej pamięć zostaje dealokowana a alokowanie jej na stercie tez nie wydaje mi się&amp;nbsp;dobrym pomysłem bo nie wiem jak później miałbym zwolnić jej pamięć. Jak powinienem to zrobić?&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Mam taki kod który daje errora o naruszeniu pamięci:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
	bigInt(int len, const char* number) {
		this-&amp;gt;len = len;
		this-&amp;gt;number = new char[len + 1]; // Dla \0 na koncu
		strcpy(this-&amp;gt;number, number);
	}
	~bigInt() {
		delete[] number;
	}

	friend bigInt operator+(bigInt left, const bigInt&amp;amp; right) {
                 // obliczenia
                 return left;
        }

&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/135919/nadpisywanie-operatora-w-klasie-ze-zmiennymi-dynamicznymi</guid>
<pubDate>Sat, 30 Apr 2016 12:48:04 +0000</pubDate>
</item>
<item>
<title>Przeciążenie operatorów c++</title>
<link>https://forum.pasja-informatyki.pl/125119/przeciazenie-operatorow-c</link>
<description>

&lt;p&gt;Witam&lt;/p&gt;



&lt;p&gt;Potrzebuje zrobić mnożenie dwóch wektorów. Nie mam pojęcia jak zwrócić nowy wektor. Prosiłbym o pomoc. Mam problem w miejscu:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Wektor Wektor::operator* (Wektor const&amp;amp; a)
{
	return Wektor(this-&amp;gt;wektor * a.wektor);
}&lt;/pre&gt;



&lt;p&gt;Oczywiscie musze zrobic takze mnozenie wektora razy macierz ale najpierw chce zajac sie wektorami.&lt;/p&gt;



&lt;p&gt;Z gory dzieki za pomoc&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;Z góry dzięki.&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
plik.cpp

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
#include &quot;macierze_wektory.h&quot;

using namespace std;

void Wektor::Wczytaj_Wektor()
{
	fstream plik;
	plik.open(&quot;wektor.txt&quot;);
	if (!plik.good())
	{
		cout &amp;lt;&amp;lt; &quot;Nie udalo sie otworzyc pliku&quot;;
		system(&quot;pause&quot;);
		exit(0);
	}

	for (int i = 0; i &amp;lt; 4; i++)
		plik &amp;gt;&amp;gt; wektor[i];

	plik.close();
}

void Macierz::Wczytaj_Macierz()
{
	fstream plik;
	plik.open(&quot;macierz.txt&quot;);
	if (!plik.good())
	{
		cout &amp;lt;&amp;lt; &quot;Nie udalo sie otworzyc pliku&quot;;
		system(&quot;pause&quot;);
		exit(0);
	}

	for (int j = 0; j &amp;lt; 4; j++)
	for (int i = 0; i &amp;lt; 4; i++)
		plik &amp;gt;&amp;gt; macierz[i][j];

	plik.close();
}

Wektor Wektor::operator* (Wektor const&amp;amp; a)
{
	return Wektor(this-&amp;gt;wektor * a.wektor);
}

plik.h

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &amp;lt;cstdlib&amp;gt;

using namespace std;

class Macierz;

class Wektor
{
private:
	double wektor[4];

public:
	Wektor()
	{
		for (int i = 0; i &amp;lt; 4; i++)
			this-&amp;gt;wektor[i] = 0;
	}
	void Wczytaj_Wektor();
	Wektor operator*(const Wektor &amp;amp;a);
};

class Macierz
{
private:
	double macierz[4][4];

public:
	Macierz()
	{
		for (int j = 0; j &amp;lt; 4; j++)
			for (int i = 0; i &amp;lt; 4; i++)
				this-&amp;gt;macierz[i][j] = 0;
	}
	void Wczytaj_Macierz();
};



main.cpp

#include &amp;lt;iostream&amp;gt;
#include &amp;lt;string&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
#include &quot;macierze_wektory.h&quot;

using namespace std;

int main()
{
	Wektor w1;
	w1.Wczytaj_Wektor();
	Wektor w2;
	w2.Wczytaj_Wektor();
	Wektor w3 = w1*w2;

	system(&quot;pause&quot;);
	return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/125119/przeciazenie-operatorow-c</guid>
<pubDate>Sat, 02 Apr 2016 19:19:54 +0000</pubDate>
</item>
<item>
<title>Przeciążenie operatorów dodawania/odejmowania boków figur</title>
<link>https://forum.pasja-informatyki.pl/120227/przeciazenie-operatorow-dodawania-odejmowania-bokow-figur</link>
<description>

&lt;p&gt;Witam!
&lt;br&gt;
Na forum nie znalazłem jednoznacznej odpowiedzi:
&lt;br&gt;

&lt;br&gt;
Cwiczenie polega na tym aby stworzyć klasę Figura, której parametry to obwód, pole i liczba boków. i ich długość.
&lt;br&gt;
Następnie musimy tak przeciążyć operator + i - aby długości odpowiadających boków zostały dodane lub odjęte. Kiedy figury różnią się ilością boków, wtedy bokom bez par przypisujemy 0. Dodakowo musimy stworzyc obiekt koło, oraz kwadrat o długości boku równej ilości stworzonych obiektów.
&lt;br&gt;
Problem:
&lt;br&gt;
To moje pierwsze przeciążanie operatorów, więc jeszcze nie wiem do końca z czym to sie je. Przy wywołaniu metody getBoki na obiektach, którę mają być sumą lub różnicą dwóch innych figur otrzymuje śmieci.
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
​
#include &quot;stdafx.h&quot;
#include &amp;lt;iostream&amp;gt;

using namespace std;

class Figura
{
private:
	int n; // ilosc bokow
	static int licznik_obiektow;
	double *wielokat;
	double pole;
	double obwod;
	bool czy_trojkat;
	bool czy_kolo;
	bool czy_kwadrat;
public:
	Figura(int);
	Figura();
	Figura(double);
	~Figura();
	Figura operator+(const Figura &amp;amp;);
	Figura operator-(const Figura &amp;amp;);
	Figura&amp;amp; operator=(const Figura &amp;amp;);
	void setBoki();
	void getBoki();
};
int Figura::licznik_obiektow = 0;
Figura::Figura(int a)
{
	licznik_obiektow++;
	n = a;
	wielokat = new double[a];
}
Figura::Figura() // konstruktor obiektu kwadrat jednostkowy
{
	licznik_obiektow++;
	n = 4;
	wielokat = new double[4];
	for (int i = 0; i &amp;lt; 4; i++)
	{
		wielokat[i] = licznik_obiektow;
	}
	pole = licznik_obiektow*licznik_obiektow;
	obwod = 4 * licznik_obiektow;
	czy_trojkat = false;
	czy_kwadrat = true;
	czy_kolo = false;
}
Figura::Figura(double r)// konstruktor obiektu kolo
{
	licznik_obiektow++;
	n = NULL;
	wielokat = new double[1];
	wielokat[0] = r;
	pole = (3.14)*r*r;
	obwod = 2 * (3.14)*r;
	czy_trojkat = false;
	czy_kwadrat = false;
	czy_kolo = true;
}
Figura::~Figura() // destruktor;
{
	delete[] wielokat;
	licznik_obiektow--;
}

Figura Figura::operator+(const Figura &amp;amp;f)
{
	int wieksza, mniejsza;
	(wieksza = (n &amp;gt; f.n) ? n : f.n);
	(mniejsza = (n &amp;gt; f.n) ? f.n : n);
	Figura ret(wieksza);
	wielokat = new double[wieksza];
	ret.obwod = 0;
	for (int i = 0; i &amp;lt; mniejsza; i++)
	{
		ret.wielokat[i] = wielokat[i] + f.wielokat[i];
		ret.obwod += ret.wielokat[i];
	}
	for (int i = mniejsza; i &amp;lt; wieksza; i++)
	{
		ret.wielokat[i] = 0;
	}
	return ret;
}

Figura Figura::operator-(const Figura &amp;amp;f)
{
	int wieksza, mniejsza;
	(wieksza = (n &amp;gt; f.n) ? n : f.n);
	(mniejsza = (n &amp;gt; f.n) ? f.n : n);
	Figura ret(wieksza);
	ret.obwod = 0;
	for (int i = 0; i &amp;lt; mniejsza; i++)
	{
		ret.wielokat[i] = wielokat[i] - f.wielokat[i];
		if (ret.wielokat[i] &amp;lt; 0) ret.wielokat[i] *= (-1);
		ret.obwod += wielokat[i];
	}
	for (int i = mniejsza; i &amp;lt; wieksza; i++)
	{
		ret.wielokat[i] = 0;
	}
	return ret;
}
Figura &amp;amp;Figura::operator=(const Figura &amp;amp;f)
{
	if (&amp;amp;f == this) return *this;
	n = f.n;
	wielokat = new double[n];
	for (int i = 0; i &amp;lt; n; i++)
	{
		wielokat[i] = f.wielokat[i];
	}
	pole = f.pole;
	obwod = f.obwod;
	czy_trojkat = f.czy_trojkat;
	czy_kolo = f.czy_kolo;
	czy_kwadrat = f.czy_kwadrat;
	return *this;
}

void Figura::setBoki()
{
	obwod = 0;
	for (int i = 0; i &amp;lt; n; i++)
	{
		cout &amp;lt;&amp;lt; &quot;Dlugosc boku &quot; &amp;lt;&amp;lt; i + 1 &amp;lt;&amp;lt; &quot;: &quot;;
		cin &amp;gt;&amp;gt; wielokat[i];
		obwod += wielokat[i];
	}
	if (n == 3)
	{
		int j;
		double bufor;
		for (int i = 0; i &amp;lt; 3; i++)
		{
			for (j = 0; j &amp;lt; 3; j++)
			{
				if (wielokat[j] &amp;gt; wielokat[i])
				{
					bufor = wielokat[j];
					wielokat[j] = wielokat[i];
					wielokat[i] = bufor;
				}
			}
		}
		if (wielokat[0] + wielokat[1] &amp;gt; wielokat[2])
		{
			czy_trojkat = true;
			double p;
			p = obwod*(0.5);
			pole = sqrt(p*(p - wielokat[0])*(p - wielokat[1])*(p - wielokat[2])); // wzor Herona
		}
		else
		{
			czy_trojkat = false;
			cout &amp;lt;&amp;lt; &quot;To nie jest figura!&quot; &amp;lt;&amp;lt; endl;
			obwod = 0;
		}
	}
}

void Figura::getBoki()
{
	for (int i = 0; i&amp;lt;n; i++)
	{
		cout &amp;lt;&amp;lt; &quot;Bok &quot; &amp;lt;&amp;lt; i + 1 &amp;lt;&amp;lt; &quot;: &quot; &amp;lt;&amp;lt; wielokat[i] &amp;lt;&amp;lt; &quot; j&quot; &amp;lt;&amp;lt; endl;
	}
	if (obwod) { cout &amp;lt;&amp;lt; &quot;Dlugosc wynosi:&quot; &amp;lt;&amp;lt; obwod &amp;lt;&amp;lt; &quot; j&quot; &amp;lt;&amp;lt; endl; }
	else { cout &amp;lt;&amp;lt; &quot;Nie ma obwodu!&quot; &amp;lt;&amp;lt; endl; }
	if (czy_trojkat == true) { cout &amp;lt;&amp;lt; &quot;Pole trojkata: &quot; &amp;lt;&amp;lt; pole &amp;lt;&amp;lt; &quot; j^2&quot; &amp;lt;&amp;lt; endl; }
	if (czy_kolo == true) { cout &amp;lt;&amp;lt; &quot;Pole kola: &quot; &amp;lt;&amp;lt; pole &amp;lt;&amp;lt; &quot; j^2&quot; &amp;lt;&amp;lt; endl; }
	if (czy_kwadrat == true) { cout &amp;lt;&amp;lt; &quot;Pole kwadratu:&quot; &amp;lt;&amp;lt; pole &amp;lt;&amp;lt; &quot; j^2&quot; &amp;lt;&amp;lt; endl; }
}

int main()
{
	int rozmiar, ilosc_figur;
	double r;
	Figura *figura_nr;
	cout &amp;lt;&amp;lt; &quot;Podaj ile katow ma Twoj wielokat: &quot;;
	cin &amp;gt;&amp;gt; rozmiar;

	Figura a(rozmiar);
	cout &amp;lt;&amp;lt; endl;
	a.setBoki();
	a.getBoki();
	cout &amp;lt;&amp;lt; endl;

	cout &amp;lt;&amp;lt; &quot;Podaj promien Twojego kola: &quot;;
	cin &amp;gt;&amp;gt; r;
	cout &amp;lt;&amp;lt; &quot;Tworze kolo&quot; &amp;lt;&amp;lt; endl;
	Figura kolo(r);
	kolo.getBoki();
	cout &amp;lt;&amp;lt; endl;

	cout &amp;lt;&amp;lt; &quot;Ile figur chcesz stworzyc ? &quot;;
	cin &amp;gt;&amp;gt; ilosc_figur;
	figura_nr = new Figura[ilosc_figur];
	for (int i = 0; i &amp;lt; ilosc_figur; i++)
	{
		cout &amp;lt;&amp;lt; &quot;Tworze figure &quot; &amp;lt;&amp;lt; i + 1 &amp;lt;&amp;lt; &quot;. &quot; &amp;lt;&amp;lt; endl;
	}

	Figura kwadrat;
	cout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; &quot;Tworze kwadrat&quot; &amp;lt;&amp;lt; endl;
	kwadrat.getBoki();
	cout &amp;lt;&amp;lt; endl;

	Figura b = kwadrat + a;
	Figura c = kwadrat - a;

	b.getBoki();
	c.getBoki();
	delete[] figura_nr;
}
&lt;/pre&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/120227/przeciazenie-operatorow-dodawania-odejmowania-bokow-figur</guid>
<pubDate>Sun, 20 Mar 2016 16:37:01 +0000</pubDate>
</item>
<item>
<title>Kompilator to odrzuca ale ja bardzo chce miec taki efekt jak to zrobic ?</title>
<link>https://forum.pasja-informatyki.pl/107872/kompilator-to-odrzuca-ale-ja-bardzo-chce-miec-taki-efekt-jak-to-zrobic</link>
<description>Czesc, koduje sobie pewna klase w C++, dosyc specyficzna klase chodzi o bazy danych.&lt;br /&gt;
&lt;br /&gt;
Deklaruje sobie strukture w klasie, udalo mi sie zadeklarowac tylko jedna referencje i to chyba dlatego ze referencja ta jest do czystego obiektu.&lt;br /&gt;
&lt;br /&gt;
Wrzucam kod :&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;struct references_to_Postgre_Objects //l&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connection C; //To nie jest obiekt transakcyjny, on sluzy do zainicjonowania obiektu transakcyjnego W klasy &amp;quot;work&amp;quot;.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connection &amp;amp;C_reference= C;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//work W(C); //to jest obiekt transakcyjny&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//work &amp;amp;W_reference = W;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//nontransaction N(C);//to jest obiekt nietransakcyjny&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//nontransaction &amp;amp;N_reference = N;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;};&lt;br /&gt;
&lt;br /&gt;
To co jest zakomentarzowane jest odrzucane przez kompilator, wiem ze tworzenie refencji do prawdopodobnie metody klasy jest niedorzeczne ale kiedy chce zrobic referencje do samego obiektu to przekierowywuje mnie do kodu biblioteki (&amp;lt;pqxx/pqxx&amp;gt;, czyli postgresql dla C++) i zacina mi sie kompilator.&lt;br /&gt;
&lt;br /&gt;
A samego obiektu nie moge zadeklarowac bo dzieje sie to co napisalem powyzej w dokumentacji pisali ze te obiekty trzeba tworzyc w taki wlasnie dziwny sposob.&lt;br /&gt;
&lt;br /&gt;
No dobra chodzi o to ze chcialbym miec referencje do tych obiektow ktore na chwile obecna tworzy sie za pomoca metod. Jezeli ktos wie o co chodzi prosze o pomoc.&lt;br /&gt;
&lt;br /&gt;
PS: Wszystkie te obiekty pochodza od klas z tej biblioteki &amp;lt;pqxx/pqxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pozdrawiam</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/107872/kompilator-to-odrzuca-ale-ja-bardzo-chce-miec-taki-efekt-jak-to-zrobic</guid>
<pubDate>Fri, 12 Feb 2016 10:38:10 +0000</pubDate>
</item>
<item>
<title>c++, problem z przeładowaniem operatora &lt;&lt;</title>
<link>https://forum.pasja-informatyki.pl/93860/c-problem-z-przeladowaniem-operatora</link>
<description>

&lt;p&gt;Cześć,&lt;/p&gt;



&lt;p&gt;Napisałem program (jest to lista jednokierunkowa)&amp;nbsp;który (narazie) tworzy listę 50 obiektów klasy Point (każdy obiekt tej klasy zawiera losową wartość, numer&amp;nbsp;oraz wskaźnik do następnego obiektu)&amp;nbsp;, a następnie wyświetla je w kolejności w jakiej zostały utworzone. Do wyświetlania tych obiektów przeładowałem operator &quot; &amp;lt;&amp;lt; &quot;. Program się kompiluje, jednak co ciekawe raz nie działa poprawnie, a po kolejnej kompilacji bez dokonywania żadnych zmian zaczyna działać poprawnie. Czy jest mi w stanie pomóc???&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Kod programu:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdlib&amp;gt;
using namespace std;

class Point
{
	private:
		Point * next;
		int value, number;
	public:
		Point (int);	
	
		void add (Point *); 
		friend bool ifnext (Point *); 
		
		Point * operator ++(); // przechodzenie do następnego
		
		friend ostream &amp;amp; operator &amp;lt;&amp;lt; ( ostream &amp;amp;, Point*); //wypisywanie 
};

Point::Point (int i): next(NULL), value(rand()%100), number(i) {}

void Point::add(Point * pointer)
{
	if (next != NULL) next-&amp;gt;add(pointer);
	else next=pointer;
}

bool ifnext (Point * pointer)
{
	if (pointer-&amp;gt;next == NULL) return 0;
	else return 1;
}

Point * Point::operator ++ ()
{
	return this-&amp;gt;next;
}

ostream &amp;amp; operator &amp;lt;&amp;lt; (ostream &amp;amp; wypisz, Point * pointer)
{
	return wypisz &amp;lt;&amp;lt; pointer-&amp;gt;number &amp;lt;&amp;lt; &quot;\t&quot; &amp;lt;&amp;lt; pointer-&amp;gt;value;
}

int main()
{
	Point * pointer, *root;
	for (int i = 0 ; i &amp;lt; 50 ; i++)
	{
		pointer = new Point(i);
		if(!i) root = pointer;
		else root-&amp;gt;add(pointer);
	}

	for (Point * i = root ;  ; ++i)
	{
		cout &amp;lt;&amp;lt; i ;
		cout &amp;lt;&amp;lt; endl;
		if (!ifnext(i)) break;
	}
	return 0;
}&lt;/pre&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;i wygląd ekranu po uruchomieniu:&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;



&lt;p&gt;MacBook-Air-Mikoaj:Documents Mikolaj$ g++ kopia.cpp -o a.out -Wall -pedantic -ansi&lt;/p&gt;



&lt;p&gt;MacBook-Air-Mikoaj:Documents Mikolaj$ ./a.out&lt;/p&gt;



&lt;p&gt;0&amp;nbsp;&amp;nbsp; &amp;nbsp;7&lt;/p&gt;



&lt;p&gt;32767&amp;nbsp;&amp;nbsp; &amp;nbsp;2001401600&lt;/p&gt;



&lt;p&gt;32767&amp;nbsp;&amp;nbsp; &amp;nbsp;2001401528&lt;/p&gt;



&lt;p&gt;MacBook-Air-Mikoaj:Documents Mikolaj$ g++ kopia.cpp -o a.out -Wall -pedantic -ansi&lt;/p&gt;



&lt;p&gt;MacBook-Air-Mikoaj:Documents Mikolaj$ ./a.out&lt;/p&gt;



&lt;p&gt;0&amp;nbsp;&amp;nbsp; &amp;nbsp;7&lt;/p&gt;



&lt;p&gt;32767&amp;nbsp;&amp;nbsp; &amp;nbsp;2001401600&lt;/p&gt;



&lt;p&gt;32767&amp;nbsp;&amp;nbsp; &amp;nbsp;2001401528&lt;/p&gt;



&lt;p&gt;MacBook-Air-Mikoaj:Documents Mikolaj$ g++ kopia.cpp -o a.out -Wall -pedantic -ansi&lt;/p&gt;



&lt;p&gt;MacBook-Air-Mikoaj:Documents Mikolaj$ ./a.out&lt;/p&gt;



&lt;p&gt;0&amp;nbsp;&amp;nbsp; &amp;nbsp;7&lt;/p&gt;



&lt;p&gt;1&amp;nbsp;&amp;nbsp; &amp;nbsp;49&lt;/p&gt;



&lt;p&gt;2&amp;nbsp;&amp;nbsp; &amp;nbsp;73&lt;/p&gt;



&lt;p&gt;3&amp;nbsp;&amp;nbsp; &amp;nbsp;58&lt;/p&gt;



&lt;p&gt;4&amp;nbsp;&amp;nbsp; &amp;nbsp;30&lt;/p&gt;



&lt;p&gt;5&amp;nbsp;&amp;nbsp; &amp;nbsp;72&lt;/p&gt;



&lt;p&gt;6&amp;nbsp;&amp;nbsp; &amp;nbsp;44&lt;/p&gt;



&lt;p&gt;7&amp;nbsp;&amp;nbsp; &amp;nbsp;78&lt;/p&gt;



&lt;p&gt;8&amp;nbsp;&amp;nbsp; &amp;nbsp;23&lt;/p&gt;



&lt;p&gt;9&amp;nbsp;&amp;nbsp; &amp;nbsp;9&lt;/p&gt;



&lt;p&gt;10&amp;nbsp;&amp;nbsp; &amp;nbsp;40&lt;/p&gt;



&lt;p&gt;11&amp;nbsp;&amp;nbsp; &amp;nbsp;65&lt;/p&gt;



&lt;p&gt;12&amp;nbsp;&amp;nbsp; &amp;nbsp;92&lt;/p&gt;



&lt;p&gt;13&amp;nbsp;&amp;nbsp; &amp;nbsp;42&lt;/p&gt;



&lt;p&gt;14&amp;nbsp;&amp;nbsp; &amp;nbsp;87&lt;/p&gt;



&lt;p&gt;15&amp;nbsp;&amp;nbsp; &amp;nbsp;3&lt;/p&gt;



&lt;p&gt;16&amp;nbsp;&amp;nbsp; &amp;nbsp;27&lt;/p&gt;



&lt;p&gt;17&amp;nbsp;&amp;nbsp; &amp;nbsp;29&lt;/p&gt;



&lt;p&gt;18&amp;nbsp;&amp;nbsp; &amp;nbsp;40&lt;/p&gt;



&lt;p&gt;19&amp;nbsp;&amp;nbsp; &amp;nbsp;12&lt;/p&gt;



&lt;p&gt;20&amp;nbsp;&amp;nbsp; &amp;nbsp;3&lt;/p&gt;



&lt;p&gt;21&amp;nbsp;&amp;nbsp; &amp;nbsp;69&lt;/p&gt;



&lt;p&gt;22&amp;nbsp;&amp;nbsp; &amp;nbsp;9&lt;/p&gt;



&lt;p&gt;23&amp;nbsp;&amp;nbsp; &amp;nbsp;57&lt;/p&gt;



&lt;p&gt;24&amp;nbsp;&amp;nbsp; &amp;nbsp;60&lt;/p&gt;



&lt;p&gt;25&amp;nbsp;&amp;nbsp; &amp;nbsp;33&lt;/p&gt;



&lt;p&gt;26&amp;nbsp;&amp;nbsp; &amp;nbsp;99&lt;/p&gt;



&lt;p&gt;27&amp;nbsp;&amp;nbsp; &amp;nbsp;78&lt;/p&gt;



&lt;p&gt;28&amp;nbsp;&amp;nbsp; &amp;nbsp;16&lt;/p&gt;



&lt;p&gt;29&amp;nbsp;&amp;nbsp; &amp;nbsp;35&lt;/p&gt;



&lt;p&gt;30&amp;nbsp;&amp;nbsp; &amp;nbsp;97&lt;/p&gt;



&lt;p&gt;31&amp;nbsp;&amp;nbsp; &amp;nbsp;26&lt;/p&gt;



&lt;p&gt;32&amp;nbsp;&amp;nbsp; &amp;nbsp;12&lt;/p&gt;



&lt;p&gt;33&amp;nbsp;&amp;nbsp; &amp;nbsp;67&lt;/p&gt;



&lt;p&gt;34&amp;nbsp;&amp;nbsp; &amp;nbsp;10&lt;/p&gt;



&lt;p&gt;35&amp;nbsp;&amp;nbsp; &amp;nbsp;33&lt;/p&gt;



&lt;p&gt;36&amp;nbsp;&amp;nbsp; &amp;nbsp;79&lt;/p&gt;



&lt;p&gt;37&amp;nbsp;&amp;nbsp; &amp;nbsp;49&lt;/p&gt;



&lt;p&gt;38&amp;nbsp;&amp;nbsp; &amp;nbsp;79&lt;/p&gt;



&lt;p&gt;39&amp;nbsp;&amp;nbsp; &amp;nbsp;21&lt;/p&gt;



&lt;p&gt;40&amp;nbsp;&amp;nbsp; &amp;nbsp;67&lt;/p&gt;



&lt;p&gt;41&amp;nbsp;&amp;nbsp; &amp;nbsp;72&lt;/p&gt;



&lt;p&gt;42&amp;nbsp;&amp;nbsp; &amp;nbsp;93&lt;/p&gt;



&lt;p&gt;43&amp;nbsp;&amp;nbsp; &amp;nbsp;36&lt;/p&gt;



&lt;p&gt;44&amp;nbsp;&amp;nbsp; &amp;nbsp;85&lt;/p&gt;



&lt;p&gt;45&amp;nbsp;&amp;nbsp; &amp;nbsp;45&lt;/p&gt;



&lt;p&gt;46&amp;nbsp;&amp;nbsp; &amp;nbsp;28&lt;/p&gt;



&lt;p&gt;47&amp;nbsp;&amp;nbsp; &amp;nbsp;91&lt;/p&gt;



&lt;p&gt;48&amp;nbsp;&amp;nbsp; &amp;nbsp;94&lt;/p&gt;



&lt;p&gt;49&amp;nbsp;&amp;nbsp; &amp;nbsp;57&lt;/p&gt;



&lt;p&gt;MacBook-Air-Mikoaj:Documents Mikolaj$&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/93860/c-problem-z-przeladowaniem-operatora</guid>
<pubDate>Wed, 30 Dec 2015 23:57:03 +0000</pubDate>
</item>
<item>
<title>Przeciążenie operatora dodawania w własnej klasie string</title>
<link>https://forum.pasja-informatyki.pl/92812/przeciazenie-operatora-dodawania-w-wlasnej-klasie-string</link>
<description>

&lt;p&gt;Oto kod :&amp;nbsp;&lt;/p&gt;



&lt;p&gt;//konstuktory itp pominalem&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
class String
{
	char * czar;
	int length;
public :
	
	String &amp;amp; operator+(const String &amp;amp; c);
	String &amp;amp; operator+=(const String &amp;amp; c);
      ~String();
String &amp;amp; String::operator+(const String &amp;amp; c)
{
	
	
	length = length + c.length ;
	char * temp = new char[length+1]; 
	strcpy(temp,czar);
	
	strncat(temp, c.czar, c.length ); //3 argument ile znakow skopiowac
	String * p = new String(temp);
	delete[] temp;
	return *p;
}
String &amp;amp; String::operator+=(const String &amp;amp; c)
{
	*this = *this + c;
	return *this; 
}
String::~String()
{
	delete [] czar;
    
}&lt;/pre&gt;



&lt;p&gt;Nie wiem jak zastapić &amp;nbsp;:&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;String * p = new String(temp);
&lt;/pre&gt;



&lt;p&gt;Destruktor raczej go nie usunie, więc co można tutaj zmodyfikować?&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/92812/przeciazenie-operatora-dodawania-w-wlasnej-klasie-string</guid>
<pubDate>Mon, 28 Dec 2015 17:11:22 +0000</pubDate>
</item>
<item>
<title>Przeciązenie operatora rownania w klasie ala string, po co zwracany *this?</title>
<link>https://forum.pasja-informatyki.pl/91027/przeciazenie-operatora-rownania-w-klasie-ala-string-po-co-zwracany-this</link>
<description>

&lt;p&gt;Jest to przykład z ksiązki szkoła programowania VI S.Prata, str 570&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
Stringbad &amp;amp; Stringbad::operator=(const Stringbad &amp;amp; st)
{
if(this==&amp;amp;st)
       return *this;

delete []str ;
len = st.len ;
str = new char [len+1] ;
std::strcpy(str,st.str);
return *this
}


&lt;/pre&gt;



&lt;p&gt;Nie potrafię zrozumieć co robi ta zwracana wartość&amp;nbsp;*this, skoro len i str już są zamienione, pomoże ktoś ?:D&lt;/p&gt;



&lt;p&gt;edit: jest to funkcja przeciążająca operator równania dla 2 wczesniejszych utworzonych obiektow tj:&lt;/p&gt;



&lt;p&gt;Stringbad s1, s2 ;&lt;/p&gt;



&lt;p&gt;s1 = s2 ;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/91027/przeciazenie-operatora-rownania-w-klasie-ala-string-po-co-zwracany-this</guid>
<pubDate>Mon, 21 Dec 2015 16:21:43 +0000</pubDate>
</item>
</channel>
</rss>