- Xiaomi 13 - felnőni nehéz
- iPhone topik
- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- Android alkalmazások - szoftver kibeszélő topik
- Íme az új Android Auto!
- Samsung Galaxy Watch7 - kötelező kör
- Honor Magic6 Pro - kör közepén számok
- Samsung Galaxy S24 FE - később
- Bemutatkozott a Poco X7 és X7 Pro
Új hozzászólás Aktív témák
-
cadtamas
tag
Rectangle::Rectangle(int top, int left, int bottom, int right) //konstruktor, idáig rendben vagyunk
{
itsTop = top; //Ez elvileg az implementáció, amit nem taglal a könyv, hogy miért kell és később miért nem használjuk semmire.
itsRight = right;
itsLeft = left;
itsBottom = bottom;
itsUpperLeft.setX(left);
itsUpperLeft.setY(top);
itsUpperRight.setX(right);
itsUpperRight.setY(top);
itsLowerLeft.setX(left);
itsLowerLeft.setY(bottom);
itsLowerRight.setX(right);
itsLowerRight.setY(bottom);
}Ugye az implementáció azért kell, mert az alapján fog elkészülni a négyszög. Gyakorlatilag automatikusan lefutnak ezek az utasítások, amikor egy négyszög objektumot létrehozunk.
Viszont az első 4 változó privát elérésű tag. Itt mégis lehet nekik közvetlenül értéket adni?
Vagy ez ilyenkor nem számít? Vagy ez a négy változó nem is az a változó amit a .h fájlban deklaráltunk, hanem valami helyi dolog?Elnézést a hülye kérdésekért, de ha ezeket nem rakom tisztába, később tutira nem fogom érteni, hogy mi történik.
-
cadtamas
tag
Sziasztok.
A tanuljuk meg a c++ nyelvet 24 óra alatt c. könyvből tanulok és az osztályoknál járok.
Van néhány dolog amit nem értek a példafeladatban.
Ez a header. Ez tiszta.#pragma once
# include <iostream>
class Point
{
private:
int itsX;
int itsY;
public:
void setX(int x) { int itsX = x; }
void setY(int y) { int itsY = y; }
int getX() const { return itsX; }
int getY() const { return itsY; }
};
class Rectangle
{
public:
Rectangle(int top, int left, int bottom, int right);
//~Rectangle();
int getRight() const { return itsRight; }
int getLeft() const { return itsLeft; }
int getTop() const { return itsTop; }
int getBottom() const { return itsBottom; }
Point getUpperLeft() const { return itsUpperLeft; }
Point getLowerLeft() const { return itsLowerLeft; }
Point getUpperRight() const { return itsUpperRight; }
Point getLowerRight() const { return itsLowerRight; }
void setUpperLeft(Point location);
void setLowerLeft(Point location);
void setUpperRight(Point location);
void setLowerRight(Point location);
void setRight(int right);
void setLeft(int left);
void setTop(int top);
void setBottom(int bottom);
int getArea() const;
private:
int itsTop;
int itsBottom;
int itsLeft;
int itsRight;
Point itsUpperLeft;
Point itsUpperRight;
Point itsLowerRight;
Point itsLowerLeft;
};Viszont itt több helyen elakadtam:
#include "rect.h"
Rectangle::Rectangle(int top, int left, int bottom, int right) //konstruktor, idáig rendben vagyunk
{
itsTop = top; //Ez elvileg az implementáció, amit nem taglal a könyv, hogy miért kell és később miért nem használjuk semmire.
itsRight = right;
itsLeft = left;
itsBottom = bottom;
itsUpperLeft.setX(left);
itsUpperLeft.setY(top);
itsUpperRight.setX(right);
itsUpperRight.setY(top);
itsLowerLeft.setX(left);
itsLowerLeft.setY(bottom);
itsLowerRight.setX(right);
itsLowerRight.setY(bottom);
}
//ide kellene gondolom a destruktor, ami azért jó, mert memóriát szabadít fel?
void Rectangle::setUpperLeft(Point location) //definiáljuk a függvényt
{
itsUpperLeft = location; //módosítja a változót ami elvileg az egyetlen feladata.
itsUpperRight.setY(location.getY()); //módosítja a JobbFelső pont Y értékét, de miért???
itsLowerLeft.setX(location.getX()); //módosítja a BalAlsó pont X értékét, de miért???
itsTop = location.getY(); //a test felső vonalát határozza meg, de nem ez a dolga!!!
itsLeft = location.getX(); //a test bal szélső vonalát határozza meg, de nem ez a dolga!!!
}
void Rectangle::setLowerLeft(Point location)
{
itsLowerLeft = location;
itsLowerRight.setY(location.getY());
itsUpperLeft.setX(location.getX());
itsBottom = location.getY();
itsLeft = location.getX();
}
void Rectangle::setLowerRight(Point location)
{
itsLowerRight = location;
itsLowerLeft.setY(location.getY());
itsUpperRight.setX(location.getX());
itsBottom = location.getY();
itsRight = location.getX();
}
void Rectangle::setUpperRight(Point location)
{
itsUpperRight = location;
itsUpperLeft.setY(location.getY());
itsLowerRight.setX(location.getX());
itsTop = location.getY();
itsRight = location.getX();
}
void Rectangle::setTop(int top) //beállítja a test felső vonalát. Ugyanazt mint a setUpperLeft() függvény. MIÉRT???
{
itsTop = top; //Ez lenne a dolga
itsUpperLeft.setY(top); //Ez ugyanazt módosítja, mint a setUpperLeft() függvény. (Részben) De ez nem ennek a feladata...
itsUpperRight.setY(top); //Ez ugyanazt módosítja, mint a setUpperRight() függvény. (Részben) De ez nem ennek a feladata...
}
void Rectangle::setLeft(int left)
{
itsLeft = left;
itsUpperLeft.setX(left);
itsLowerLeft.setX(left);
}
void Rectangle::setBottom(int bottom)
{
itsBottom = bottom;
itsLowerLeft.setY(bottom);
itsLowerRight.setY(bottom);
}
void Rectangle::setRight(int right)
{
itsRight = right;
itsUpperRight.setX(right);
itsLowerRight.setX(right);
}
int Rectangle::getArea() const
{
int width = itsRight - itsLeft;
int height = itsTop - itsBottom;
return (width*height);
}
int main()
{
Rectangle MyRectangle(100, 20, 50, 80); //Létrehozzuk a négyszöget
int Area = MyRectangle.getArea();
std::cout << "Terulet: " << Area << "\n";
std::cout << "Bal felso pont x koordinataja: ";
std::cout << MyRectangle.getUpperLeft().getX()<< std::endl; //ennek 20-nak kellene lennie, de nem annyi.
system("pause");
return 0;
}
Kommenteltem, ami nem világos. Tudnátok segíteni, hogy megértsem mi, miért történik? -
cadtamas
tag
Köszönöm mindenkinek a segítséget.
-
cadtamas
tag
válasz
dobragab #3876 üzenetére
Hazudnék, ha azt mondanám, hogy minden világos, de remélem ahogy haladok a tananyaggal majd megvilágosodok. Eddig nem volt bajom a könyvvel, de azt észrevettem, hogy nem bajlódik az alapokkal és bizonyos tudásszintet természetesnek vesz.
Kezdőknek semmiképp sem ajánlanám.
Egy éve tanulom a pythont, csak az unreal engine miatt kénytelen vagyok megtanulni a c++ alapjait is. Nem volt rossz ötlet azzal kezdeni, egyes dolgokat jóval nagyvonalúbban kezel. -
cadtamas
tag
válasz
dabadab #3874 üzenetére
Nagyon köszönöm a válaszod.
A fő felhasználási terület a függvények paramétereinél van. A paramétereket alapvetően átadhatjuk értékként vagy hivatkozásként: ha értékként adjuk át, akkor ha a függvényben bizergáljuk, az nincs kihatással az eredeti változóra - ha hivatkozásként, akkor meg igen.
Ha a függvény feladata egy változó módosítása, akkor miért nem adjuk meg a függvény visszatérési értékének ezt az értéket és írjuk felül az eredeti változót?
A másik felhasználás az, amikor new-val hozunk létra objektumokat, hogy az élettartamuk független legyen annak a függvénynek az élettartamától, amelyik létrehozza őket (ugye a helyi változók csak addig élnek, amíg a függvény le nem fut - ha new-val hozol létre valamit, az meg addig, amíg rá nem küldesz egy delete-et).
Erre tudnál adni valami pédát, mert nem értem miért lenne szükségem bármire egy függvényből annak lefutása után. (kivéve persze az eredményt) Vagy ha szükségem van rá, akkor miért nem a programtörzsben deklarálom?
-
cadtamas
tag
Sziasztok, pár hete tanulom a c++ nyelvet és a Tanuljunk meg programozni c++ nyelven 24 óra alatt c. könyvet használom. Eljutottam a mutatók/hivatkozások témakörhöz és egy kissé megakadtam.
Valójában teljes a káosz.
Azt nem fejti ki rendesen, hogy miért kellenek a mutatók/hivatkozások, de azt igen, hogy miket ne csináljak mert ha törölt hivatkozásra mutat a mutató akkor túlcsordul a memória és az internet letörli önmagát, aztán összecsomagol és visszaköltözik az anyjához.Itt van ez a példaprogram:
//12.5 Lista
//A memóriszivárgás javítása
#include <iostream>
class SimpleCat //létrehozom az osztályt, minden frankó
{
public:
SimpleCat(int age, int weight);
~SimpleCat() {}
int GetAge() { return itsAge; }
int GetWeight() { return itsWeight; }
private:
int itsAge;
int itsWeight;
};
SimpleCat::SimpleCat(int age, int weight) : //deklaráljuk a simplecat osztályt
itsAge(age), itsWeight(weight) {} //Gondolom itt meg azonnal meghívjuk a függvényeit, bár ilyet még korábban nem láttam
SimpleCat & TheFunction(); //Ez egy funkció, de lövésem sincs, miért így kell megadni és innentől elveszítem a fonalat
int main()
{
SimpleCat & rCat = TheFunction();
int age = rCat.GetAge();
std::cout << "rCat is " << age << " years old!\n";
std::cout << "&rCat: " << &rCat << std::endl;
SimpleCat*pCat = &rCat;
delete pCat;
return 0;
}
SimpleCat & TheFunction()
{
SimpleCat * pFrisky = new SimpleCat(5, 9);
std::cout << "pFrisky: " << pFrisky << std::endl;
return *pFrisky;
}Segítenétek nekem a helyére rakni a dolgokat?
De valami emberi nyelven megfogalmazva.
Miért kellenek a mutatók és a hivatkozások és mire használjuk őket?
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- SSD kibeszélő
- EA Sports WRC '23
- Parfüm topik
- Soundbar, soundplate, hangprojektor
- AMD vs. INTEL vs. NVIDIA
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Mielőbb díjat rakatnának a görögök az olcsó csomagokra az EU-ban
- Autós topik
- Nintendo Switch 2
- One otthoni szolgáltatások (TV, internet, telefon)
- További aktív témák...
- ÚJ aktiválatalan Apple iPhone 16 Pro 128GB ! 1ÉV nemzetközi APPLE GARANCiA
- Új Gamer PC - Ryzen 7 5700X / RTX 5060 / A520M / 16GB vagy 32GB RAM / 240GB + 1TB M.2 SSD / 650W
- Samsung Galaxy Z Fold 4 256 GB, szürkészöld + S Pen tok
- TP-Link ER-7212PC Omada 3-in-1 Gigabit VPN Router
- TP-Link EAP Omada Wifi AP-k (225, 245, 615)
- 12.000 ft tól elvihető ELITRO Bankmentes , kamatmentes vásárlás .Cooler Master GM2711S Monitor
- AKCIÓ! Lenovo Legion Slim 5 Gamer notebook - R7 7435HS 16GB RAM 1TB SSD RTX 4070 8GB GDDR6 WIN11
- Eladó ÚJ BONTATLAN Honor Magic6 Lite 8/256GB fekete / 12 hónap jótállással!
- 121 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 (48 hónap garancia!)
- Ultimate előfizetés új fiókra akár 2105 Ft/hó áron! Azonnali, automatizált aktiválással, csak Nálam!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest