Přetěžévání operátorů – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Přetěžévání operátorů – C / C++ – Fórum – Programujte.comPřetěžévání operátorů – C / C++ – Fórum – Programujte.com

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vytvořte si vlastní webové stránky. Snadno, rychle a levně přes Saywebpage.com
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Kubas
~ Anonymní uživatel
8 příspěvků
11. 11. 2019   #1
-
0
-

Ahoj, hraji si s funkcemi, které slouží k přetěžování operátorů a narazil jsem na jednu věc, kterou nechápu :(

mám třídu Cislo

//soubor Cislo.h, deklarovani hlavicek funkci
class Cislo
{
public:
	Cislo();
	~Cislo();
	//Cislo(Cislo& odkaz);///kontruktor pro kopirovani
	Cislo (int);
	const int ZiskejHodnotu() const { return hodnota; }
	 Cislo operator+(Cislo &odkaz);
	 operator int();
private:
	int hodnota;
};
//soubor Cislo.cpp
#include "Cislo.h"


Cislo::Cislo()
{
}

const Cislo Cislo::operator++(int param)
{
	//Cislo pom = *this;
	Cislo pom(*this);//volam konstruktor pro kopirovani
	hodnota++;
	return pom;
}

 Cislo Cislo::operator+(Cislo & odkaz)
{
	 int soucet = (int)(hodnota + odkaz.hodnota);
	 Cislo suma = soucet;
	return suma;
}

 Cislo::operator int()
 {
	 return hodnota;
 }

Cislo::~Cislo()
{
}

//Cislo::Cislo(Cislo & odkaz)
//{
//	 this->hodnota=odkaz.hodnota ;
//}
#include <iostream>
#include "Cislo.h"
int main()
{
	using namespace std;
	Cislo cislo=30, cislo2=60;
	cout << "prirazeni cislo=30\n";
	//Cislo soucet = cislo + cislo2;
	Cislo soucet(cislo.operator+(cislo2));
	cout << "soucet cisel je:\n"<<soucet.ZiskejHodnotu()<<endl;
}

Program pro součet dvou instancí objektu Cislo funguje, ale nepochopil jsem, že když si napíšu svůj vlastní kopírovací konstruktor, tak program vyžaduje po mě, abych tam přidal ještě funkci operator int();, která slouží k převodu (konverzi) instance objektu na celočíselnou proměnnou, bez ní to s navrženým kopírovacím kosntruktorem nejde a nevím proč jí to potřebuje, proč to tam do ní následně po provedení toho příkazu přiřazení do ní program skáče :(. Že když ten konstruktor pro kopírování vykomentuju a nechám tam ten výchozí, který si program sám vytváří, tak tuto funkci konverze z objektu na integer nepotřebuje (což chápu proč jí nepotřebuje). Prostě nechápu, kde je ten převod z instance objektu na celočíselnou proměnnou.

Doufám, že se mi to podařilo dobře vysvětlit co na tom nechápu :D

Díky moc za rady :) 

Nahlásit jako SPAM
IP: 62.141.28.–
Kubas
~ Anonymní uživatel
8 příspěvků
11. 11. 2019   #2
-
0
-

#1 Kubas
pardon všiml jsem si v tom souboru Cislo.cpp, že jsem tam omylem vymazal nesprávnou funkci, tahle je snad už správně :-)

#include "Cislo.h"


Cislo::Cislo()
{
}
Cislo::Cislo(int param):hodnota(param)
{

}

 Cislo Cislo::operator+(Cislo & odkaz)
{
	 int soucet = (int)(hodnota + odkaz.hodnota);
	 Cislo suma = soucet;
	return suma;
}

 Cislo::operator int()
 {
	 return hodnota;
 }

Cislo::~Cislo()
{
}

//Cislo::Cislo(Cislo & odkaz)
//{
//	 this->hodnota=odkaz.hodnota ;
//}
Nahlásit jako SPAM
IP: 62.141.28.–
gna
~ Anonymní uživatel
1017 příspěvků
11. 11. 2019   #3
-
0
-

Mně se to nepodařilo navodit (starý gcc/clang), ale tipuju, že to po tobě chce operator int, protože jako jediný použitelný konstruktor vidí ten pro int.

U toho kopírovacícho kontruktoru deklaruj tu referenci jako const.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 65 hostů

Podobná vlákna

Přetížení operátoru ^ — založil TauWich

Nastavení operátoru != — založil TomBar

Přetypování operátorů — založil Wimby

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý