Commit a9eb703a by Szeberényi Imre

v0

parents
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="nem_oo" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/nem_oo" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-pedantic-errors" />
<Add option="-std=c++11" />
<Add option="-Wfatal-errors" />
<Add option="-Wall" />
<Add option="-g" />
<Add option="-D_DEBUG" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/nem_oo" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
<Add option="-std=c++98" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-DMEMTRACE" />
</Compiler>
<Unit filename="max.hpp" />
<Unit filename="memtrace.cpp" />
<Unit filename="memtrace.h" />
<Unit filename="nem_oo.cpp" />
<Unit filename="nem_oo.h" />
<Unit filename="nem_oo_teszt.cpp" />
<Extensions>
<code_completion />
<envvars />
<debugger />
<DoxyBlocks>
<comment_style block="0" line="0" />
<doxyfile_project />
<doxyfile_build />
<doxyfile_warnings />
<doxyfile_output />
<doxyfile_dot />
<general />
</DoxyBlocks>
</Extensions>
</Project>
</CodeBlocks_project_file>
<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9,00"
Name="CppEllenallas"
ProjectGUID="{980E727A-A5E8-4647-885D-B056013AC81B}"
RootNamespace="CppEllenallas"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\resistor.cpp"
>
</File>
<File
RelativePath=".\resistor_test.cpp"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\resistor.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
# Pelda Makefile a Cpp Ellenallas megoldasanak forditasara
# Solaris (ural2) es Linux ala.
objs = resistor.o resistor_test.o # forditando obj. fajlok
heads = resistor.h # headerek, amitol minden fugg
prog = resistor # a program neve
CXX = g++ # a C++ fordito neve
#CXX = clang++ # clang-ot (llvm) is erdemes kiprobalni
CXXFLAGS = -pedantic -Wall # C++ kapcsolok: legyen bobeszedu,
CXXFLAGS += -g # ... es forduljon debug info is
# alapertelmezett cel: tesztprogram linkelese
all: $(prog)
$(prog): $(objs)
$(CXX) $(objs) -o $@
$(objs): $(heads)
# takaritas igeny szerint
clean:
rm -f $(objs) resistor *~
A Git tárolóból letölthető [https://git.ik.bme.hu/Prog2/ell_feladat/CppEllenallas](https://git.ik.bme.hu/Prog2/ell_feladat/CppEllenallas)
fájlok felhasználásával hozzon létre a lokális fejlesztőkörnyezetében egy projektet!
Tanulmányozza a letöltött állományokat!
A **Resistor** osztály egy elektromos ellenállás leegyszerűsített működését szimulálja.
Az osztályt a **resistor.h** állományban deklaráltuk.
Néhány kézenfekvő műveletet operátor túlterheléssel oldottunk meg.
Az Ön feladata a _resistor.h_ állományban deklarált nem inline tagfüggvények(\*1) megvalósítása a **resistor.cpp** állományban, úgy hogy
a **resistor\_test.cpp** fájl leforduljon és jól működjön!
Két ellenállás összege alatt sorba kötést értünk, vagyis az eredő ellenállás a kettő összege.
Két ellenállás párhuzamos kapcsolását a % operátorral jelöljük. Párhuzamosan kapcsolt ellenállások eredője a két ellenállás replusza, vagyis
![R\_{{A\%B}}=\frac{{1}}{{\frac{{1}}{{R\_A}} +\frac{{1}}{{R\_B}}}}](https://jporta.iit.bme.hu/exercise/18/view/12/file)
A konstruktorokon és a destruktoron kívül a következő tagfüggvényeket deklaráltuk:
void setDef(double) - a paraméter nélkül hívott konstruktor ezzel az ellenállásértékkel hozza létre az objektumot (ld. *2 megj.)
double getR() const – (eredő) ellenállás lekérdezése [Ω]
Resistor operator+(const Resistor&) const – soros kapcsolás operátora
Resistor operator%(const Resistor&) const – párhuzamos kapcsolás operátora
Van még egy többszörös-operátor is, amely n darab egyforma sorosan kapcsolt r ellenállás
eredőjét képzi:
Resistor operator*(int n, const Resistor& r)
Valósítsa meg a hiányzó függvényeket úgy, hogy jól működjön az osztály a **resistor\_test.cpp** tesztprogrammal.
A * operátort úgy valósítsa meg, hogy nulla vagy negatív n esetén az Ön Neptun-kódját tartalmazó const char* típusú kivételt dobjon!
A **defR** statikus adattagot úgy definiálja, hogy értéke **{resistor_value}Ω** legyen!
A definíciónál a **static** kulcsszót nem kell/szabad újra kiírni! (\*2)
**Megj:**
\*1 Az osztályban deklarált tagfüggvények automatikusan inline függvények.
\*2 A statikus adattag, és a statikus tagfüggvény fogalma a 4. előadáson válik ismertté. A lokális teszt nem kéri ennek ismeretét, ha
definiálja a **NO_STATIC** makrót! Ekkor a lokális teszt nem teszteli ezt a feladatrészt.
A portálra azonban **csak teljes megoldást töltsön fel**!
/**
* \file resistor.cpp
* Ohmikus ellenállást modellező osztály megvalósítása
*/
/**
* Itt kell megvalósítani a resistor.h-ban deklarált nem inline függvényeket.
* A Jportára ezt a fájlt kell feltölteni.
*/
#ifndef _RESISTOR_H
#define _RESISTOR_H
#define NO_STATIC
/**
* \file resistor.h
* Ohmikus ellenállás
*/
class Resistor {
double R; // az ellenállás értéke ohmban
#ifndef NO_STATIC
static double defR; // ellenállások alapértelmezett értéke ohmban
// ezt a statikus adattagot külön meg kell valósítani
// az osztályon kívül.
#endif
public:
/// Kontstruktor.
/// R alapértelmezett értéket (defR-t) kap
Resistor();
/// Kontstruktor.
/// @param r - ellenállás értéke [ohm]
Resistor(double r);
#ifndef NO_STATIC
/// Default ellenállásérték beállítása
/// @param r - ellenállás értéke [ohm]
static void setDef(double r);
#endif
/// Ellenállás értékének lekérdezése.
/// @return - ellenállás értéke [ohm]
double getR() const {
return R;
}
/// Két ellenállás soros kapcsolása.
/// @param r - ellenállás
/// @return - eredõ ellenállás
Resistor operator+(const Resistor& r) const;
/// Két ellenállás párhuzamos kapcsolása.
/// @param r - ellenállás
/// @return - eredõ ellenállás
Resistor operator%(const Resistor& r) const;
};
/// Többszörös: n darab egyforma r ellenállás összege (soros kapcsolása).
/// @param n - darabszám
/// @param r - ellenállás
/// @return - eredõ ellenállás
Resistor operator*(int n, const Resistor& r);
#endif // _RESISTOR_H
/**
* \file resistor_test.cpp
* Ohmikus ellenállást modellező osztály kipróbálása
*/
#include <iostream>
#include "resistor.h"
using std::cout;
using std::endl;
using std::cin;
int main()
{
// cporta tesztesetei miatt csak egészeket írunk ki.
cout.setf(std::ios::fixed);
cout.precision(0);
Resistor r;
cout << r.getR() << endl; // default érték
cout << Resistor(130).getR() << endl; // 130
cout.precision(0);
Resistor r1(1000), r2(3000), r3(6000);
// o--[r1]--[r2]--o
cout << (r1 + r2).getR() << endl // 4000
// +--[r1]--+
// o--+ +---o
// +--[r1]--+
<< (r1 % r1).getR() << endl // 500
// o--[r1]--[r1]--o
<< (2 * r1).getR() << endl // 2000
// o--[r1]--[r1]--[r2]--o
<< (2*r1 + r2).getR() << endl // 5000
// o--[r1]--[r2]---[r1]--[r2]--o
<< (2 * (r1+r2)).getR() << endl // 8000
// +--[r2]--+ +--[r2]--+
// o--+ +---+ +---o
// +--[r3]--+ +--[r3]--+
<< (2 * (r2%r3)).getR() << endl; // 4000
#ifndef NO_STATIC
Resistor::setDef(2); // 2 ohm a default
#endif
Resistor rt[10]; // a tömb minden eleme 2 ohmos lesz
cout << rt[5].getR() << endl; // 5. elem is 2
try {
int n;
while (cin >> n) { // amíg tud számot olvasni
cout << (n * r1).getR() << endl;
}
cout << "Építsünk örökmozgót!" << endl;
}
catch (const char *s) {
cout << s << endl; // dobott kivétel
}
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment