- C++ μ£Όμ κΈ°λ₯ ( μΆμν, μ 보 μλ, μΊ‘μν)
#include <iostream>
using namespace std;
// C++ μ£Όμ κΈ°λ₯
// 1. μΆμν(abstracton)
// : μ¬λ¬Όμ μ¬μ€μ μΌλ‘ νννλ κ°λ
(ꡬμν)κ° μλ
//   λΆνμν λΆλΆμ μ κ±°νκ³  곡ν΅λ νΉμ§λ§μ μΆμΆνλ κ²
// ex) μ€λ§νΈν° -> User : λ΄λΆ μ€κ³ λͺ¨λ₯΄μ§λ§, μ μ¬μ©ν¨ (μΈλΆ μΈν°νμ΄μ€ - λ΄λΆ ꡬν)
// 2. λ°μ΄ν° μλ(Data hiding)
// : κ°μ²΄μ μμ±μ μ¨κΈ°κ³  곡κ°λ μΈν°νμ΄μ€λ§μ ν΅ν΄μ μμ ν  μ μλλ‘ ν¨
// 3. μΊ‘μν(Capsulation)
// : κ°μ²΄μ μμ±κ³Ό κΈ°λ₯μ νλλ‘ λ¬Άκ³ , μΈλΆ ꡬνμ ν΄λμ€ μμΌλ‘ μ¨κΈ°λ κ²
//  μ λμ΄ μλ ν΄λμ€λ μ¬νμ©λκ° λ§€μ° λλ€
// μλλ μΊ‘μνκ° μλͺ»λ μμ μ΄λ€.
class File {
public:
	void load()
	{
		cout << "mp3 νμΌμ λ©λͺ¨λ¦¬μ μ¬λ¦°λ€." << endl;
	}
};
class PowerDevice {
public:
	void PowerUp()
	{
		cout << "mp3 playλ₯Ό μν νμλ₯Ό μ¬λ¦°λ€." << endl;
	}
};
class Memory {
public:
	void expand()
	{
		cout << "mp3 playλ₯Ό μν λ©λͺ¨λ¦¬λ₯Ό λ립λλ€." << endl;
	}
};
class Mp3 {
public:
	void play()
	{
		cout << "mp3λ₯Ό playν©λλ€" << endl;
	}
};
int main()
{
	PowerDevice pd;
	Memory m;
	File f;
	Mp3 mp;
	pd.PowerUp();
	m.expand();
	f.load();
	mp.play();
}
//  Userλ mp3λ₯Ό μ¬μ©νλ €λ©΄ μ¬μ κΈ°λ₯λ§μ μ¬μ©νλ©΄ λλ€.
//  mp3μ μΈλΆκ΅¬νμ μ¨κΈ°λλ‘ νλ κ²μ΄ μΊ‘μν μλμ μμ  μ°Έκ³ νμ
#include <iostream>
using namespace std;
// mp3μ playκΈ°λ₯λ§μ μ¬μ©ν¨μΌλ‘
// μ΄ mp3 ν΄λμ€λ₯Ό μ¬μ©νλ μ μ λ μΈλΆ ꡬνμ λν΄ λͺ°λΌλ λ¨
class File {
public:
	void load()
	{
		cout << "mp3 νμΌμ λ©λͺ¨λ¦¬μ μ¬λ¦°λ€." << endl;
	}
};
class PowerDevice {
public:
	void PowerUp()
	{
		cout << "mp3 playλ₯Ό μν νμλ₯Ό μ¬λ¦°λ€." << endl;
	}
};
class Memory {
public:
	void expand()
	{
		cout << "mp3 playλ₯Ό μν λ©λͺ¨λ¦¬λ₯Ό λ립λλ€." << endl;
	}
};
class Mp3 {
private:
	File f;
	PowerDevice pd;
	Memory m;
public:
	void play()
	{
		pd.PowerUp();
		m.expand();
		f.load();
		cout << "mp3 play" << endl;
	}
};
int main()
{
	Mp3 mp;
	mp.play();
}
- μμ±μ
#include <iostream>
using namespace std;
#define NAME_LEN 20
#define SEX_LEN 10
#define JOB_LEN 20
#define CHARACTER_LEN 20
class Person {
private:
	char name[NAME_LEN];
	char sex[SEX_LEN];
	char job[JOB_LEN];
	char character[CHARACTER_LEN];
	int age;
	bool marriageStatus;
public:
	// λν΄νΈ μμ±μ
	Person()
	{
		cout << "λν΄νΈ μμ±μ : Person::Person()" << endl;
		// λ³μ μ΄κΈ°ν
	}
	// μ λ² μκ°μ νλ constructorμ κ°μ κΈ°λ₯μ μννλ μμ±μ
	// λ©€λ² μ΄κΈ°νλ₯Ό μ΄μ©ν μμ±μ
	Person(const char* name, const char* sex, const char* job,const char* character,
		int age, bool marriageStatus);      // μμ±μ μ μΈ
	void introduce();
	void eat(const char* food);
	void sleep();
	void drive(const char* dest);
	void write();
	void read();
};
int main()
{
	// Person player1, player2;
	//player1.constructor("μμ¬", "μ¬μ±", "μ½λ©μ²μ¬", "μ¨μ", 21, true);
	// player2.constructor("μ’
λͺ
", "λ¨μ±", "μμμ", "μ±μ€", 23, false);
	Person player1("μμ¬", "μ¬μ±", "μ½λ©μ²μ¬", "μ¨μ", 21, true);
	Person player2("μ’
λͺ
", "λ¨μ±", "μμμ", "μ±μ€", 23, false);
	player1.introduce();
	player2.introduce();
	player1.eat("λ§λΌν");
}
 Person::Person(const char* name, const char* sex, const char* job, const char* character, int age, bool marriageStatus)
{
	strcpy_s(this->name, name);
	strcpy_s(this->sex, sex);
	strcpy_s(this->job, job);
	strcpy_s(this->character, character);
	this->age = age;
	this->marriageStatus = marriageStatus;
	cout << "μμ±μ : Person::Person(~)" << endl;
}
void Person::introduce()
{
	cout << "μ΄λ¦ : " << name << endl;
	cout << "μ±λ³ : " << sex << endl;
	cout << "μ§μ
 : " << job << endl;
	cout << "μ±κ²© : " << character << endl;
	cout << "λμ΄ : " << age << endl;
	cout << "κ²°νΌ μ¬λΆ : " << (marriageStatus ? "YES" : "NO") << endl;
}
void Person::eat(const char* food)
{
	cout << name << "μ(λ) " << food << "λ₯Ό λ¨Ήλλ€" << endl;
}
void Person::sleep()
{
	cout << name << "μ(λ) μλ€" << endl;
}
void Person::drive(const char* dest)
{
	cout << name << "μ(λ) " << dest << "μΌλ‘ μ΄μ νλ€" << endl;
}
void Person::write()
{
	cout << name << "μ(λ) μ±
μ μ΄λ€" << endl;
}
void Person::read()
{
	cout << name << "μ(λ) μ±
μ μ½λλ€" << endl;
}
// 01) μμ±μ μ μΈ
// - ν΄λΉ ν΄λμ€μ μ΄λ¦κ³Ό κ°μμΌ νλ©°, λ°ννμ΄ μμ΄μΌ νλ€
// 02) μμ±μ νΈμΆνλ κ³³μ μ΄λμΈκ°?
// - κ°μ²΄ μμ±μ μν λ©λͺ¨λ¦¬ κ³΅κ° ν λΉκ³Ό λμμ μμ±μκ° νΈμΆλλ€.
// - νμ¬μ μ½λμμ κ°μ²΄λ₯Ό μμ±κ³Ό λμμ μ΄κΈ°ν νκ³  μλ€.
// 03) κ°μ μ΄λ¦μΌλ‘ μ¬λ¬ κ° λ§λ€ μ μμΌλ©° (ν¨μ μ€λ²λ‘λ©)
// 04) μλ΅ κ°λ₯νλ€ (λν΄νΈ μμ±μ μλ μμ±)
// -> λν΄νΈ μμ±μ(κΈ°λ³Έ μμ±μ)
// μ°λ¦¬κ° μμ±νλ μ½λμμ μμ±μλ₯Ό μ§μ°λ©΄? -> λμκ°κΈ΄ νλ μ°λ κΈ° κ°.
- μλ©Έμ
#include <iostream>
using namespace std;
// μλ©Έμ(deconstructor)
// κ°μ²΄κ° μλ©Έν  λ μλ νΈμΆ
// λμ  λ©λͺ¨λ¦¬λ₯Ό ν΄μ νλ μ©λλ‘ μ¬μ©
// μλ΅ κ°λ₯
// λμ  λ©λͺ¨λ¦¬
// cμΈμ΄ - malloc(), free(0
// c++ - new, delete
// strcpy_s
// - 첫 λ²μ§Έ λ§€κ°λ³μλ‘ λ°μ λ©λͺ¨λ¦¬μ
// λ λ²μ§Έ λ§€κ°λ³μλ‘ λ°μ κΈΈμ΄λ§νΌ
// μΈ λ²μ§Έ λ§€κ°λ³μμ λ΄μ©μ 볡μ¬
class Person {
private:
	char* name;
public:
	Person(const char* name) //μμ±μ
	{
		this->name = new char[strlen(name) + 1];    // λμ ν λΉ
		strcpy_s(this->name, strlen(name) + 1, name);
		cout << "Person::Person(name) μμ±μ μλ£" << endl;
	}
	Person()
	{
		cout << "Person::Person() μμ±μ μλ£" << endl;
	}
	~Person() // μλ©Έμ
	{
		delete[] name;
		cout << "Person::~Person μλ©Έμ μλ£" << endl;
	}
	void introduce();
};
int main()
{
	Person person("λ―Έμ");
	person.introduce();
}
void Person::introduce()
{
	cout << "μ΄λ¦: " << name << endl;
}
- λ³΅μ¬ μμ±μ
#include <iostream>
using namespace std;
// λ³΅μ¬ μμ±μ (볡μ¬ν  λ νΈμΆλλ μμ±μ)
// - λ¨Όμ  μμμΌ κ°μ²΄λ₯Ό μ΄μ©ν΄μ μλ‘μ΄ κ°μ²΄ μ΄κΈ°ννλ κ²½μ°
// - λ¨Όμ  μμ±ν κ°μ²΄λ₯Ό μΈμλ‘ μ λ¬νλ κ²½μ°
// - ν¨μ λ΄μμ κ°μ²΄λ₯Ό λ°ννλ κ²½μ°
// μλμ μ½λμμ μλ©Έμ 2λ² νΈμΆ -> μ΄μ 
class Person {
private:
	int age;
	int num;
public:
	Person(int age) : age(age) //μμ±μ
	{
		cout << "Person::Person(age) μμ±μ μλ£" << endl;
	}
	Person()
	{
		cout << "Person::Person() μμ±μ μλ£" << endl;
	}
	~Person() // μλ©Έμ
	{
		cout << "Person::~Person μλ©Έμ μλ£" << endl;
	}
	void introduce();
};
int main()
{
	Person person1(23);
	Person person2(person1);  // 볡μ¬μμ±μ νΈμΆ
	// person2 = person1;
	person1.introduce();
	person2.introduce();
}
void Person::introduce()
{
	cout << "λμ΄ : " << age << endl;
}


#include <iostream>
using namespace std;
// λν΄νΈ λ³΅μ¬ μμ±μ -> λ¬Έμ  μ‘΄μ¬
// μμ λ³΅μ¬ vs κΉμ 볡μ¬
// λν΄νΈ λ³΅μ¬ μμ±μλ λ©€λ² λ³μμ κ°μ 볡μ¬νκΈ°μ,
// λ©λͺ¨λ¦¬ μ£Όμκ°μ 볡μ¬νκ² λ¨  -> λ¬Έμ  λ°μ
// μλμ μ½λ λ°νμ μ€λ₯ λ°μ
// - λ³΅μ¬ μμ±μ νΈμΆμ μν΄ λ©€λ² λ³μ κ° λ³΅μ¬μΈ μμ 볡μ¬κ° μ§ν
// - person1 κ°μ²΄μ name ν¬μΈν°μ κ°μΈ 'μ£Όμ1'μ΄ personμ name ν¬μΈν° κ°μΌλ‘ 볡μ¬
// - μ¦ κ°μ λ©λͺ¨λ¦¬ 곡κ°μ κ°λ₯΄ν€κ² λ¨
// - μλ©Έμκ° νΈμΆλ¨μ λ°λΌ (μλ©Έμλ μμμΌλ‘ νΈμΆλ¨) person2 κ°μ²΄ μλ©Έ
// - μ΄μ΄ person1μ μλ©Έμ νΈμΆλλ €λ μ°°λ deleteλμ΄μΌ νλ λ©λͺ¨λ¦¬ 곡κ°μ΄ μμ΄ μ€λ₯
// => κΉμ 볡μ¬μ νμ
// -> λ³΅μ¬ μμ±μμ μ¬μ μ νμ
// -> ν¬μΈν°μ κ°λ§μ 볡μ¬νλκ² μλ,
//  ν¬μΈν°κ° κ°λ¦¬ν€λ λ©λͺ¨λ¦¬μ λ΄μ©κΉμ§ 볡μ¬ν΄μΌ ν¨
// => μ£Όμ νκ³  μ€ν
class Person {
private:
	char* name;
public:
	Person(const char* name)   //μμ±μ
	{
		this->name = new char[strlen(name) + 1];
		strcpy_s(this->name, strlen(name) + 1, name);
		cout << "Person::Person(name) μμ±μ μλ£" << endl;
	}
	Person()
	{
		cout << "Person::Person() μμ±μ μλ£" << endl;
	}
	~Person() // μλ©Έμ
	{
		delete[] name;
		cout << "Person::~Person μλ©Έμ μλ£" << endl;
	}
	/*
	Person(const Person& p)
	{
		this->name = new char[strlen(p.name) + 1];    // nameν¬μΈν° κ°μ μν λ©λͺ¨λ¦¬ μλ‘ ν λΉ
		strcpy_s(this->name, strlen(p.name) + 1, p.name);  // λ©λͺ¨λ¦¬μ 볡μ¬
		cout << "Person::Person(cosnt Person&) 볡μ¬μμ±μ μλ£" << endl;
	}
	*/
	void introduce();
};
int main()
{
	Person person1("μ£Όλ
Έ");
	Person person2(person1);  // 볡μ¬μμ±μ νΈμΆ
	// person2 = person1;
	person1.introduce();
	person2.introduce();
}
void Person::introduce()
{
	cout << "μ΄λ¦ : " << name << endl;
}

728x90
    
    
  'π§ Study > C++ & C#' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| 05. μμκ³Ό ν¬ν¨ (0) | 2024.04.11 | 
|---|---|
| 04. μ°μ°μ μ€λ²λ‘λ© / μ΄λ μμ±μ&μ΄λ λμ μ°μ°μ / λμ  λ©λͺ¨λ¦¬ (1) | 2024.03.27 | 
| 02. μ°μ°μ / ν¨μ / ν΄λμ€ (0) | 2024.03.13 | 
| 01. κ°μ²΄μ κΈ°λ³Έ λ¬Έλ² (0) | 2024.03.12 |