κ°μ²΄μ§ν₯ νλ‘κ·Έλ¨ μ΄λ?
κ°μ²΄μ§ν₯ κ°λ
(μΊ‘μν, μ 보μλ ...)
νλ‘κ·Έλ¨ λΆμ(κ°κ΄μ)
μ
μΆλ ₯(cin, cout)
ν΄λμ€(μΈμ€ν΄μ€) κ΄κ³, ꡬμ±
κ°μ²΄ (μ¬μ©) λμ μμ±/μ μ μμ±
μ κ·Όμ μ΄ (public, private, protected)
λ©€λ² λ³μ/ν¨μ μΈλΆμ μ
μ€λ²λ‘λ©(μμ±μ)/ μ€λ²λΌμ΄λ©
UML
μμ±μ/μλ©Έμ (μμ)
λ©€λ² μ΄κΈ°ν(μμ μ΄κΈ°ν , μ΄κΈ°ν λ°©λ² 3κ°μ§.)
this ν¬μΈν°
μ μ λ©€λ²(static)
μμ
λΆλͺ¨μμ±μ λͺ
μμ νΈμΆ
κ°μ²΄μ§ν₯ νλ‘κ·Έλ¨ μ΄λ?
λ°μ΄ν°μ ν¨μλ₯Ό νλμ λ©μ΄λ¦¬λ‘ λ¬Άμ΄μ μκ°νλ λ°©λ²μ΄λ€.
λ°μ΄ν°μ ν¨μλ₯Ό κ°μ²΄λ‘ λ¬Άλ κ²μ μΊ‘μν(encapsulation)λΌκ³ λΆλ₯Έλ€.
- λ°μ΄ν° μκ³ λ¦¬μ¦ λ λ€ μ€μν΄μ§
- λ°μ΄ν° μκ³ λ¦¬μ¦μ classλ‘ λ¬Άμ΄μ κ°μ²΄λΌκ³ λΆλ¦
- κ°μ²΄ = μ€μ μΈκ³λ₯Ό λͺ¨λΈλ§ν¨
κ°μ²΄μ§ν₯μ μ΅μ’
λͺ©ν
- μ½λμ μ¬μ¬μ©
κ°μ²΄μ§ν₯
- μ€μ μΈκ³λ₯Ό λͺ¨λΈλ§ν΄μ μννΈμ¨μ΄λ₯Ό κ°λ°νλ λ°©λ²
κ°μ²΄
- κ°μ²΄λ μνμ λμμ κ°μ§κ³ μμ
- κ°μ²΄ μνstate = μμ± (λ³μνμ
- λμ behavior = κ°μ²΄κ° μ·¨ν μ μλ λμ (ν¨μ
ν΄λμ€
- ν΄λμ€λ κ°μ²΄λ₯Ό λ§λ€κΈ° μν
- κ°μ²΄λ₯Ό λ§λλ μ€κ³λ
μΈμ€ν΄μ€
- ν΄λμ€λ‘λΆν° λ§λ€μ΄μ§ κ°μ²΄λ€μ κ·Έ ν΄λμ€μ μΈμ€ν΄μ€
κ°μ²΄μ§ν₯ κ°λ
(μΊ‘μν, μ 보μλ ...)
- 1μΊ‘μν ::λ°μ΄ν°μ ν¨μ(μ°μ°)λ₯Ό κ°μ²΄ μμ λ£μ΄ λ¬Άλ κ²
- 2μ 보μλ:: private κ°μ²΄ λ΄λΆμ λ°μ΄ν°μ ꡬνμ μΈλΆ μ¬νμ μΈλΆ μΈκ³μμ κ°μΆλ κ²
- 3μμ::λΆλͺ¨ν΄λμ€λ₯Ό μ΄μ΄λ°μ
κΈ°μ‘΄μ μ½λλ₯Ό μ¬νμ©νκΈ° μν κΈ°λ²,
μ΄λ―Έ μμ±λ ν΄λμ€(λΆλͺ¨ν΄λμ€)λ₯Ό μ΄μ΄ λ°μμ μλ‘μ΄ ν΄λμ€ (μμ ν΄λμ€) λ₯Ό μμ±νλ κΈ°λ²
- 4λ€νμ±:: κ°μ²΄μ λμμ΄ μν©μ λ°λΌ λ¬λΌμ§
κ°μ²΄κ° μ·¨νλ λμν μν©μ λ°λΌμ λ¬λΌμ§λ κ²μ μλ―Ένλ€ -> ν¨μ μ΄λ¦μ μ¬μ¬μ©
νλ‘κ·Έλ¨ λΆμ(κ°κ΄μ)
μ μΆλ ₯(cin, cout)
C++μμλ μ½μ μ
λ ₯μ cin κ°μ²΄κ°, μ½μ μΆλ ₯μ cout κ°μ²΄κ° λ΄λΉ
μ΄λ€μ λͺ¨λ iostream λΌμ΄λΈλ¬λ¦¬μ ν¬ν¨
# Cout κ°μ²΄
- λ€μν λ°μ΄ν° μΆλ ₯
- << μ½μ
μ°μ°μ
- cout << μΆλ ₯λ°μ΄ν° ;
# Cin κ°μ²΄
- λ€μν λ°μ΄ν° μ
λ ₯ λ°μ
- >> μΆμΆ μ°μ°μ
- cin >> μ μ₯ν λ³μ;
cin >> num; //μ
λ ₯
cout << "λ²νΈλ : " << num << "μ
λλ€" << endl; // μΆλ ₯
#include<iostream>
using namespace std;
int main() {
printf("hello pc\n");
std::cout << "hello\n pc" << std::endl;
cout << "hello pc" << endl;
}
/* #include<stdio.h>
int main() {
printf("hellp PC\n");
return 0;
}
*/
//μ£Όμ μ²λ¦¬ λ¨μΆν€
//#include<math.h>
//CμΈμ΄ κ°μ μλ£ C99 1999 μ μλ°λ
//C++ 3λ
λ§λ€ κ°μ μ΄ λ¨ (λ€λ₯Όμμμ)
#include<iostream> //input output νλ₯΄λ€, ν€λνμΌ
using namespace std; //κΈ°λ³Έμ μΌλ‘ μ¨μ€λ€ , μ΄λ¦κ³΅κ°μ€μ
void main() { // void . 리ν΄μ , ν¨μμ μΈ
printf("hellp PC\n");
//μλ¦Ώμ λ§μΆλ
cout << "hello PC" << endl;
//νλ¦°νΈf μ /n = endl = μλ¦Ώμ λ§μΆ νμ μμ λ
//μ무거λ μ¬μ©ν΄λλ¨
cout << "hello PC"; //μ½μμμ == μΆλ ₯
cout << "hello PC" << endl;
cout << "hello PC" << endl;
cout << "hello" << "PC\n" << endl << "white" << endl;
//cin μ
λ ₯
int num;
printf("λ²νΈλ₯Ό μ
λ ₯ν΄ μ£ΌμΈμ: ");
cin >> num; // νμ΄ν >> num μμΌλ‘ λ€μ΄κ°
//scanf μμμ§μ μ(νμ)κ° μμλλ° μμ΄μ§
//C++μ νμμ μμ° μλμΌλ‘ μ½μ΄μ΄
cout << "λ²νΈλ : " << num << "μ
λλ€" << endl; // νμ΄ν << λ°μΌλ‘ μΆλ ₯
// return;
}
ββββν΄λμ€(μΈμ€ν΄μ€) κ΄κ³, κ΅¬μ± ###μ£Όκ΄μ 1λ¬Έμ
ν΄λμ€(class): κ°μ²΄λ₯Ό λ§λλ μ€κ³λ
ν΄λμ€λ‘λΆν° λ§λ€μ΄μ§λ κ°κ°μ κ°μ²΄λ₯Ό νΉλ³ν κ·Έ ν΄λμ€μ μΈμ€ν΄μ€ (instance)λΌκ³ λ νλ€.
class Car {}; // Car ν΄λμ€ μμ± = νμ
Car c1, c2; // Car νμ
λ³μ μ μΈ = κ°μ²΄ μμ±
c1.speed = 50; //λ©€λ² λ³μ μ κ·Ό = (.) λνΈ μ°μ°μ μ¬μ©
c1.gear = 3;
c1.start();
c1.view();
κ°μ²΄ (μ¬μ©) λμ μμ±/μ μ μμ±
ν΄λμ€ = νμ
int main(void) {
//μ μ μμ±
Car myCar;
myCar.view();
//λμ μμ± new μ delete μ¬μ©
Car* myCar = new Car(); //ν¬μΈν° λ©λͺ¨λ¦¬μμΉμ μ°¨μ΄
myCar->speed;
myCar->view(); //λ©λͺ¨λ¦¬ λμκ° μκΈ°λκΉ
if (!myCar) //ν΄μ μ¬λ¬λ²ν΄λ²λ¦¬λ©΄ λ¬Έμ μκΈ°λκΉ μ‘°κ±΄μ λ£μ΄μ€λ€.
delete myCar; //λ©λͺ¨λ¦¬ ν΄μ μμΌμ€μΌν¨
}
μ κ·Όμ μ΄ (public, private, protected)
#include<iostream>
using namespace std;
#private (λν΄νΈ) μ μ©λ©€λ²-ν΄λμ€ μμμλ§ μ¬μ©κ°λ₯
class Car {
private: //λ°μ΄ν° νμ¬ μν κ°μ μ κ·Ό μλκ² μ£Όμ
//κΈ°λ³Έ κ°μ private
string color = "white";
int speed = 0;
int gear = 0;
# public 곡μ©λ©€λ²-μ΄λμλ μ§ κ°μ²΄λ₯Ό ν΅νμ¬ μ¬μ©κ°λ₯
public:
void speedUp() { //ν¨μλ₯Ό ν΅ν΄μ μ μ½μ 건λ€.(쑰건ν΅μ )
//λ³μλ‘λ 쑰건ν΅μ κ° λΆκ°λ₯ν¨
if (speed > 100)
speed = 0;
else
speed += 10;
}
void speedDown() {
if (speed < 0)
speed = 0;
else
speed -= 10;
}
void view() {
cout << "speed = " << speed << endl;
cout << "gear = " << gear << endl;
cout << "color = " << color << endl;
}
};
# protected
μμκ΄κ³μμ λΆλͺ¨ν΄λμ€μμ νμλ μμν΄λμ€κ°
λΆλͺ¨ν΄λμ€μ 보νΈλ©€λ²λ₯Ό μ¬μ©ν μ μλ€.
class Emp {
int rrn;
protected:
int salary;
public:
string name;
void setSalart(int salary);
int getSaltry();
};
class Manager : public Emp {
int bonus;
public:
Manager(int b = 0) : bonus(b) {}
void modify(int s, int b);//ν¨μμν μΈλΆμ μ
void display();
};
void Manager::modify(int s, int b) { //ν¨μ μΈλΆμ μ
salary = s;
bonus = b;
}
};
λ©€λ² λ³μ/ν¨μ μΈλΆμ μ
class Cat {
void setEat(int e); // 5.ν¨μ μΈλΆ μ μ - μν
};
void Cat::setEat(int e) { // 5.ν¨μ μΈλΆ μ μ
~~
}
λ©€λ² ν¨μκ° ν΄λμ€ λ΄λΆμ μ μλλ©΄ μλμ μΌλ‘ μΈλΌμΈ(inline) ν¨μκ° λ
λ€.
ο΅ λ©€λ² ν¨μκ° ν΄λμ€ μΈλΆμ μ μλλ©΄ μΌλ°μ μΈ ν¨μμ λμΌνκ² νΈμΆνλ€
#pragma once
#include<iostream>
using namespace std;
class Cat { //1.κ³ μμ΄ ν΄λμ€ λ§λ€κΈ°
string name; //2.λ©€λ²λ³μλ§λ€κΈ°
bool sleep;
int age;
int hungry;
string meow;
string meow2;
public:
Cat() { //7.μμ±μ λ§λ€κΈ° (μμ±μ 1λ² , λ΄λΆμ μ)
name = "NABI";
sleep = 0;
age = 0;
hungry = 0;
meow = "...";
meow2 = "...";
}
//Cat(int a); //7.μμ±μ λ§λ€κΈ° (<μ€λ³΅μμ±μ> 맀κ°λ³μ μλ μμ±μ 2λ² , μΈλΆμ μ)
void setName(string n) { //2.λ©€λ²ν¨μλ§λ€κΈ° , 3. setμ€μ μ
name = n;
};
string getName() { // 3.getμ κ·Όμ
return name;
};
void setAge(int a) {
age = a;
}
/* void setAge(double a) { //11. double κ°λ€μ΄μ€λ©΄ λ°μ¬λ¦ΌνκΈ°
age = a;
age = ceil(a);
} */
int getAge() {
return age;
}
void setSleepOn() {
sleep = true;
meow = "Zzzz...";
};
void setSleepOff() {
sleep = false;
meow = "μΌμ΄λ¬μ΄μ.";
setAttractOn();
};
void setEat(int e); // 5.ν¨μ μΈλΆ μ μ
int getEat() {
return hungry;
}
void setAttractOn() {
meow.append("Meow~♥");
}
void setAttractOff() {
meow2.append(" Meow@#@^&#!#!!!!");
}
void view() {
cout << " ======μν===== "<< endl;
cout << " μ΄λ¦ : " << name << endl;
cout << " λμ΄ : " << age << endl;
cout << " λ°°κ³ ν : " << hungry << endl << endl;
cout << " ======λν===== " << endl;
cout << "λ :" << name << ", λν΄?" << endl;
cout << name << " : " << meow << endl << endl;
cout << "λ :" << name << ", λ°°κ³ νλ?" << endl;
cout << name << " : " << meow2 << endl;
cout << " =============== " << endl;
}
~Cat() { //μλ©Έμ
}
};
void Cat::setEat(int e) { // 5.ν¨μ μΈλΆ μ μ
hungry = e;
if (sleep == false) {
if (e > 8) {
meow2 = "λ°°λΆλ¬μ";
}
else if (e == 0) {
meow2 = "λ무λ무 λ°°κ³ νμ";
setAttractOff();
}
else if (0 < e <= 4) {
meow2 = "λ°°κ³ νμ";
}
}
else {
meow2 = "Zzz...";
}
}
/* Cat::Cat(int a) {//7.μμ±μ λ§λ€κΈ° (<μ€λ³΅μμ±μ> 맀κ°λ³μ μλ μμ±μ 2λ² , μΈλΆμ μ)
name = "NABI";
sleep = 0;
age = a;
hungry = 0;
meow = "...";
meow2 = "...";
}
*/
μ€λ²λ‘λ©(μμ±μ)/ μ€λ²λΌμ΄λ©
μ€λ²λ‘λ© = μ€λ³΅μ μ
class Car {
private:
string color = "RED";
int speed = 0;
int gear = 0;
public:
int getSpeed() { //μ κ·Όμ
return speed;
}
#λ©€λ²ν¨μ μ€λ³΅ μ μ(μ€λ²λ‘λ©)κ° κ°λ₯
void setSpeed(int s);
void setSpeed(double s) { cout << "double" << endl; };
void setSpeed(int s, double g) { cout << "int, double" << endl; };
void setSpeed(double s, int g) { cout << "double, int" << endl; };
void setSpeed(string c) { cout << "string" << endl; };
//
c1.setSpeed(); //μ€λ₯
c1.setSpeed(10); // κ³³μ΄ μ ν΄μ Έμμ μ€λ₯ μλ¨
c1.setSpeed(10,3.5); // κ³³μ΄ μ ν΄μ Έμμ μ€λ₯ μλ¨
}
--------------------------------
//곡 μμ±μ
// λν΄νΈ μμ±μ
//μΈμκ° μλ μμ±μ
int getGear();
void setGear(int g) { gear = g; }
int getSpeed() { return speed; }
int Car::getGear() {
return gear;
}
void Car::setSpeed(int s) {
if (speed > 100)
speed = 100;
else
speed = s;
}
μ€λ²λΌμ΄λ© = μ¬μ μ
μ¬μ μ(overriding): μμ ν΄λμ€κ° νμμ λ°λΌ μμλ λ©€λ² ν¨μλ₯Ό λ€μ μ μνλ κ²
/* λΆλͺ¨ ν΄λμ€μ λ©€λ² ν¨μμ λμΌν μκ·Έλμ²λ₯Ό κ°μ ΈμΌ νλ€.
ο΅ μ¦ λ©€λ² ν¨μμ μ΄λ¦, λ°νν, λ§€κ° λ³μμ κ°μμ λ°μ΄ν° νμ
μ΄ μΌμΉνμ¬
μΌ νλ€. */
#include <iostream>
#include <string>
using namespace std;
class Car {
public:
int getHp()
{
return 100; // 100λ§λ ₯ λ°ν
}
};
class SportsCar :public Car {
public:
int getHp()
{
return 300; // μ€λ²λΌμ΄λ© = μ¬μ μ
}
};
int main() {
SportsCar sc;
cout << "λ§λ ₯ :" << sc.getHp() << endl;
return 0;
}
--------------
int main() {
SportsCar sc;
cout << ":" << sc.Car::getHp() << endl; //μ¬μ μ μ ν¨μ νΈμΆ
return 0;
}
UML
UML(Unified Modeling Language):
μ ν리μΌμ΄μ μ ꡬμ±νλ ν΄λμ€λ€ κ°μ κ΄κ³λ₯Ό 그리기 μνμ¬ μ¬μ©
μμ±μ/μλ©Έμ (μμ)
κ°μ²΄μ μμ±
μμ±μ()
κ°μ²΄μ μ¬μ©
μλ©Έμ()
κ°μ²΄μ νκ΄΄
m.blog.naver.com/psychoria/40093564549
μμ±μ(contructor):
κ°μ²΄κ° μμ±λ λμ νλμκ² μ΄κΈ°κ°μ μ 곡νκ³ νμ ν μ΄κΈ°ν μ μ°¨λ₯Ό μ€ννλ λ©€λ² ν¨μ
ο΅ ν΄λμ€ μ΄λ¦κ³Ό λμΌνλ€
ο΅ λ°νκ°μ΄ μλ€.
ο΅ λ°λμ public μ΄μ΄μΌ νλ€.
ο΅ μ€λ³΅ μ μν μ μλ€
-μμ±μ μΈλΆ μ μ
1. λν΄νΈ μμ±μ
2. 맀κ°λ³μλ₯Ό κ°μ§λ μμ±μ
3. μμ±μ μ€λ³΅μ μ
4. μμ±μ νΈμΆ
5. μμ±μ νλλ μ μνμ§ μμΌλ©΄,
6. λν΄νΈ 맀κ°λ³μ
7. μμ±μμμ λ€λ₯Έ μμ±μ νΈμΆ
A(int a, int b){
m_a = a;
m_b = b;
};
A(int a, int b) : m_a(a), m_b(b){ // μ΄κΈ°ν 리μ€νΈ(Member Initialization List)
//λ ν μΌ
};
1. μμ λ©€λ² λ³μ μ΄κΈ°ν
class ABC{
public:
const int A;
ABC(int i) : A(i){}
};
2. λ νΌλ°μ€ λ©€λ² λ³μ μ΄κΈ°ν
3. ν¬ν¨λ κ°μ²΄μ μ΄κΈ°ν
4. μμ λ°μ λ©€λ² λ³μλ₯Ό μ΄κΈ°ν ν λ
μλ©Έμλ ν΄λμ€ μ΄λ¦μ ~κ° λΆλλ€.
ο΅ κ°μ λ°ννμ§ μλλ€.
ο΅ public λ©€λ² ν¨μλ‘ μ μΈλλ€.
ο΅ μλ©Έμλ λ§€κ° λ³μλ₯Ό λ°μ§ μλλ€.
ο΅ μ€λ³΅ μ μλ λΆκ°λ₯νλ€.
1.μλ©Έμ
~Car() {
}
2.λν΄νΈ μλ©Έμ //νλ‘κ·Έλλ¨Έκ° μλ©Έμ μ μ νμ§ μμμΌλ©΄ μλμ½μ
λμ΄μ νΈμΆλ¨
public:
Car() {
speed = 100;
gear = 3;
color = "RED";
}
//μμ±ν λ μ΄κΈ°κ° λ€μ΄κ°κ³ , μμ±μκ° λμνλ©΄μ κ°μ΄ λ€μ΄κ°
//μμ±μ μ΄κΈ°νν κ±°λ©΄ μμ±ν λ μ΄κΈ°κ° μλ£μ΄μ€λλ¨
// μμ λ°νκ° xx
public:
Car() {
speed = 100;
gear = 3;
color = "RED";
}
Car(int g) {
speed = 100;
gear = g;
color = "RED";
}
//μμ±μκ° μ¬λ¬κ°λΌλ λμνλ건 μμ±μ λ¨ !! 1κ° !!!!!!!!
// μΈμ
main {
Car c1; // μΈμ μλ
Car c2(20); //μΈμμλ
μλμΌλ‘ λ§μΆ°μ λ€μ΄κ°
ν¨μμΈλ° κ°μ²΄ λ§λ€κ±Έ μ νκ°λ₯
μΈλΆλ‘ λΉΌκΈ°
Car (int g);
Car:: Car(int g) {
speed = 100;
gear = g;
color = "RED";
}
//곡μμ±μ
//λν΄νΈ μμ±μ
Car () {
}
//μΈμκ° μλ μμ±μ
Car (int n) {
}
//μλ©Έμ
~Car() {
}
λ©€λ² μ΄κΈ°ν(μμ μ΄κΈ°ν , μ΄κΈ°ν λ°©λ² 3κ°μ§.)
1. μμ λ©€λ² μ΄κΈ°ν (λ
νΉ)
Car(): speed(300) {
}
-------------
Car(int s, int g, string c) : spped(s), gear(g), color(c) {
}
this ν¬μΈν°
thisλ νμ¬ μ½λλ₯Ό μ€ννλ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ ν¬μΈν°
λ©€λ²λ³μ
#include <iostream>
using namespace std;
class ThisPo {
int n1;
int n2;
public:
//λ©μλμ 맀κ°λ³μλ ν΄λμ€μ λ©€λ² λ³μ ꡬλ³κ°λ₯
ThisPo(int n1, int n2) {
this->n1 = n1; //this->n1 λ©€λ²λ³μ
this->n2 = n2;
}
void print()
{
cout << this->n1 << endl;
cout << this->n1 << endl;
}
};
void main() {
ThisPo num(2, 4);
num.print();
return;
}
μ μ λ©€λ²(static)
μΈμ€ν΄μ€ λ³μ(instance variable): κ°μ²΄λ§λ€ νλμ© μλ λ³μ
μ μ λ³μ(static variable): λͺ¨λ κ°μ²΄λ₯Ό ν΅νμ΄μ νλλ§ μλ λ³μ
staticμ μΈλΆμμ μ΄κΈ°ν
class Car {
static int count;
};
int Car::count = 0;
μμ
: κΈ°μ‘΄μ μ‘΄μ¬νλ μ μ¬ν ν΄λμ€λ‘λΆν° μμ±κ³Ό λμμ μ΄μ΄λ°κ³ μμ μ΄ νμν κΈ°λ₯μ μΆκ°νλ κΈ°λ₯
#include <iostream>
#include <string>
using namespace std;
class Car {
int speed = 10;
public:
void setSpeed(int s) {
speed = s;
}
};
class sportCar :public Car { //μμ
bool turbo = false;
public:
void setTurbo(int t) {
turbo = t;
}
void view() {
cout << "speed = " << speed << endl;
// λΆλͺ¨ μμμ΄λΌκ³ ν΄λ privateλ μ κ·Ό λΆκ°λ₯ speed μ€λ₯ λΈ
cout << "turbo = " << turbo << endl;
}
};
void main() {
sportCar s1;
s1.speed = 100;
}
λΆλͺ¨μμ±μ λͺ
μμ νΈμΆ
Rectangle::rectangle(int x, int y, int w, int, y) : Shape(x, y) {
}