Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:cpp:cpp_objektum_orientalt_programozas

< CPP

CPP Objektum Orientált Programozás

Struktúra

A C++ nyelvben a struktúrákban már az osztályok is meghatározhatók:

program01.cxx
#include <iostream>
 
using namespace std;
 
struct Dolgozo {
	string nev;
	void beallitNev(string ujNev) {
		nev = ujNev;
	}
	string lekerNev() {
		return nev;
	}
};
 
int main(int argc, char **argv) {
	Dolgozo mari;
	mari.beallitNev("Nagy Mária");
	cout << mari.lekerNev() << endl;
	return 0;
}

Az egységbezárás így még magasabb szinten valósul meg.

A struktúra és az osztály

A struktúra és az osztály között a különbség, hogy az osztályban minden tag alapértelmezetten private elérésű, míg a struktúrában public.

program01.cxx
#include <iostream>
 
using namespace std;
 
class Dolgozo {
	string nev;
  public:
	void beallitNev(string ujNev) {
		nev = ujNev;
	}
	string lekerNev() {
		return nev;
	}
};
 
int main(int argc, char **argv) {
	Dolgozo mari;
	mari.beallitNev("Nagy Mária");
	cout << mari.lekerNev() << endl;
	return 0;
}

Függvény megvalósítása osztályban

A tagfüggvényeket ugyan megvalósíthatjuk osztályon belül, mint az alábbi példában látjuk, azonban az osztályokat külön fejlécfájlba szokás rakni. A fejlécfájlokban pedig nem szokás függvényeket megvalósítani.

program01.cxx
#include <iostream>
 
using namespace std;
 
class Dolgozo {
	string nev;
  public:
	void allitNev(string nev) {
		this->nev = nev;
	}
};
 
int main(int argc, char **argv) {
	Dolgozo mari;
	mari.allitNev("Mária");
 
	return 0;
}

Az osztály külön állományban

dolgozo.h
 #include <iostream>
using namespace std;
 
class Dolgozo {
	string nev;
	int kor;
	double fizetes;
  public:
	void beallitNev(string ujNev);
	string lekerNev();
	Dolgozo();	
	~Dolgozo();	
};
dolgozo.cxx
#include "dolgozo.h"
using namespace std;
Dolgozo::Dolgozo () {
	nev = "Névtelen";
	kor = 0;
}
 
Dolgozo::~Dolgozo () {
	//Destruktor
}
 
void Dolgozo::beallitNev(string ujNev) {
	nev = ujNev;
}
 
string Dolgozo::lekerNev() {
	return nev;
}
main.cxx
#include <iostream>
#include "dolgozo.h"
using namespace std;
 
int main(int argc, char **argv) {
	Dolgozo joska;
	std::cout << joska.lekerNev() << std::endl;
	joska.beallitNev("Nagy Lajos");
	std::cout << joska.lekerNev() << std::endl;
	return 0;
}
Makefile
TARGET = main
CXX = g++
RM = rm
CPPFLAGS = -Wall -g
LDFLAGS =
SRCS = main.cxx dolgozo.cxx
HEADS = dolgozo.h
OBJS = main.o dolgozo.o
 
${TARGET}: ${OBJS}
	${CXX} ${LDFLAGS} -o ${TARGET} ${OBJS}
 
${OBJS}.o:${SRCS} ${HEADS}
	${CXX} ${CPPFLAGS} -c ${SRCS}
 
clean:
	${RM} ${OBJS} ${TARGET}

Osztály létrehozása

program01.cpp
#include <iostream>
 
using namespace std;
 
class Dolgozo {
	string nev;
	int kor;
	double fizetes;
  public:
	void beallitNev(string ujNev);
	string lekerNev();
	Dolgozo();	
	~Dolgozo();	
};
 
Dolgozo::Dolgozo () {
	nev = "Névtelen";
	kor = 0;
}
 
Dolgozo::~Dolgozo () {
	//Destruktor
}
 
void Dolgozo::beallitNev(string ujNev) {
	nev = ujNev;
}
 
string Dolgozo::lekerNev() {
	return nev;
}
 
int main(int argc, char **argv) {
	Dolgozo joska;
	std::cout << joska.lekerNev() << std::endl;
	joska.beallitNev("Nagy Lajos");
	std::cout << joska.lekerNev() << std::endl;
	return 0;
}

Többalakú konstruktor

program01.cxx
#include <iostream>
using namespace std;
class Dolgozo {
	string nev;
  public:
	Dolgozo() {
		nev = "Névtelen";
	}
	Dolgozo(string ujNev) {
		nev = ujNev;
	}
	string lekerNev() {
		return nev;
	}
};
 
 
int main(int argc, char **argv)
{
	Dolgozo mari("Nagy Mária");;
	cout << mari.lekerNev() << endl;
 
	return 0;
}

Destruktor

A destruktorban törölhetjük a dinamikusan létrehozott (mutató) tagokat:

program01.cxx
#include <iostream>
using namespace std;
class Dolgozo {
  public:
	double *fizetes;
 
	Dolgozo() {
		fizetes = new double;
	}
	~Dolgozo() {
		delete fizetes;
		cout << "A destruktor lefutott" << endl;
	}
};
 
int main(int argc, char **argv) {
	Dolgozo janos;
	*janos.fizetes = 820000;
	cout << *janos.fizetes << endl;
	return 0;
}

Öröklés

class Szemely {
  protected:
	string nev;
	string szuletes;	
};
 
class Dolgozo  : Szemely {	
	double fizetes;
  public:
	void beallitNev(string ujNev);
	string lekerNev();
	Dolgozo();	
	~Dolgozo();	
};

Többszörös öröklés

program01.cxx
#include <iostream>
 
class A {
	int a;
};
 
class B {
	int b;
};
 
class C : public A, public B {
 
};
 
int main(int argc, char **argv) {
	C o;
	o.a = 3;
	o.b = 5;
	std::cout << o.a << std::endl;
	std::cout << o.b << std::endl;	
	return 0;
}

Dinamikus adattagokat tartalmazó osztály

program01.cxx
#include <iostream>
using namespace std;
class Dolgozo {
	string nev;
  public:
	Dolgozo() {
		nev = "Névtelen";
	}
	Dolgozo(string ujNev) {
		nev = ujNev;
	}
	string lekerNev() {
		return nev;
	}
};
 
int main(int argc, char **argv)
{	
	Dolgozo* peti = new Dolgozo("Kék Péter");
	cout << peti->lekerNev() << endl;
	return 0;
}
oktatas/programozas/cpp/cpp_objektum_orientalt_programozas.txt · Utolsó módosítás: 2021/05/25 23:25 szerkesztette: admin