Przeciążenie operator+

Przeciążenie operator+
R0
R0
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Mam pytanie jak przeciązyć operator+:

Kopiuj
 
int main()
{
    Przedmiot P1("Matematyka",6);
    Przedmiot P2 = P1;
    Przedmiot P3("Automaty",11);;

    P3.wypisz();
    6+P3; // chodzi o to (zwiększyć ilość w obiekcie P3 o 6)
    P3+6;// z tym nie mam problemu 
    return 0;
}
Westen
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 5 lat
0

w pliku nagłówkowym swojej klasy piszesz funkcję:

Kopiuj
Przedmiot operator+(const Przedmiot& _param2) const
{
     return Przedmiot(a +_param2.b, a + _param2.b);
}

o ile konstruktor wygląda mniej-więcej tak:

Przedmiot(a, b);

gośćabc
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Szczecin
  • Postów:500
0

ja proponuję taki układ

Kopiuj
#include <iostream>
#include <memory>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>

struct A
{
	A& operator+=(A const& rhs) {
		x += rhs.x;
		return *this;
	}

	friend A operator+(A lhs, A const& rhs) {
		return lhs += rhs;
	}

	int x;
};

int main()
{
	A a1 { 2 };
	A a2 { 3 };

	std::cout << (a1 + a2).x;

	return 0;
}

http://melpon.org/wandbox/permlink/3wbFUjfqrdTcRFh2

R0
R0
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

6+P3; Ma działać w funkcji main tak jak napisałem wyżej, mój wykładowca sobie tak zażyczył.
P3 jest obiektem klasy Przedmiot

edytowany 1x, ostatnio: removed001
gośćabc
true, ok niedoczytaned :) fixne
gośćabc
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Szczecin
  • Postów:500
1
Kopiuj
#include <iostream>
#include <memory>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>

struct A
{
	A& operator+=(int val) {
		x += val;
		return *this;
	}

	friend A operator+(A lhs, int val) {
		return lhs += val;
	}

	friend A operator+(int val, A lhs) {
		return lhs += val;
	}

	int x;
};

int main()
{
	A a1 { 2 };

	std::cout << (1 + a1).x;
	std::cout << std::endl << (a1 + 2 + 3).x;
        std::cout << std::endl << (-5 + a1 + 3).x;

	return 0;
}

http://melpon.org/wandbox/permlink/7qITessC3ZUSuaVu

R0
R0
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Metodą prób i błędów chciałem uzyskac takie coś:

Kopiuj
 
//Przedmiot.h
friend void operator+(int,Przedmiot &);
//Przedmiot.cpp

void operator+(int l,Przedmiot & P)
{
    P.ilosc+=l;
}

Dzięki za naprowadzenie gośćabc

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.