π€ Study/C++ & C#
03. C++ μ£Όμ κΈ°λ₯ & μμ±μ/μλ©Έμ/볡μ¬μμ±μ
GAMEMING
2024. 3. 20. 00:41
728x90
- 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;
}