Languages/C++
[C++] ํด๋์ค์ ๊ฐ์ฒด | Class | C++
- -
๋ฐ์ํ
์ธ์์ ๋ชจ๋ ๊ฒ์ ๊ฐ์ฒด์ด๋ค.
์บก์ํ(encapsulation)
- ๊ฐ์ฒด์ ๋ณธ์ง์ ์ธ ํน์ฑ
- ๊ฐ์ฒด๋ฅผ ์บก์๋ก ์ธ์ ๊ทธ ๋ด๋ถ๋ฅผ ๋ณดํธํ๊ณ ๋ณผ ์ ์๊ฒ ํจ
- ์บก์์ ๋ ์ฝ์ ์ด๋ค ์์ธ์ง ์ด๋ค ์ฑ๋ถ์ธ์ง ๋ณด์ด์ง ์๊ณ , ์ธ๋ถ๋ก๋ถํฐ ์์
- ์บก์ํ ์ฌ๋ก
- ์บก์ํ์ ๋ชฉ์
- ๊ฐ์ฒด ๋ด ๋ฐ์ดํฐ์ ๋ํ ๋ณด์, ๋ณดํธ, ์ธ๋ถ ์ ๊ทผ ์ ํ
๏จ ํด๋์ค
- ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ด๊ธฐ ์ํด ์ ์๋ ์ค๊ณ๋, ํ
- ํด๋์ค๋ ๊ฐ์ฒด๊ฐ ์๋. ์ค์ฒด๋ ์๋
- ๋ฉค๋ฒ ๋ณ์์ ๋ฉค๋ฒ ํจ์ ์ ์ธ
๏จ ๊ฐ์ฒด
- ๊ฐ์ฒด๋ ์์ฑ๋ ๋ ํด๋์ค์ ๋ชจ์์ ๊ทธ๋๋ก ๊ฐ์ง๊ณ ํ์
- ๋ฉค๋ฒ ๋ณ์์ ๋ฉค๋ฒ ํจ์๋ก ๊ตฌ์ฑ
- ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ, ์ค์ฒด(instance)๋ผ๊ณ ๋ ๋ถ๋ฆ
- ํ๋์ ํด๋์ค ํ์์ ์ฐ์ด๋ธ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ
- ๊ฐ์ฒด๋ค์ ์ํธ ๋ณ๋์ ๊ณต๊ฐ์ ์์ฑ
C++ํด๋์ค ๋ง๋ค๊ธฐ
- ํด๋์ค ์์ฑ
- ๏ค ๋ฉค๋ฒ ๋ณ์์ ๋ฉค๋ฒ ํจ์๋ก ๊ตฌ์ฑ
- ๏ค ํด๋์ค ์ ์ธ๋ถ์ ํด๋์ค ๊ตฌํ๋ถ๋ก ๊ตฌ์ฑ
- ๏จ ํด๋์ค ์ ์ธ๋ถ(class declaration)
- ๏ค class ํค์๋๋ฅผ ์ด์ฉํ์ฌ ํด๋์ค ์ ์ธ
- ๏ค ๋ฉค๋ฒ ๋ณ์์ ๋ฉค๋ฒ ํจ์ ์ ์ธ
- ๏ฎ ๋ฉค๋ฒ ๋ณ์๋ ํด๋์ค ์ ์ธ ๋ด์์ ์ด๊ธฐํํ ์ ์์
- ๏ฎ ๋ฉค๋ฒ ํจ์๋ ์ํ(prototype) ํํ๋ก ์ ์ธ
- ๏ค ๋ฉค๋ฒ์ ๋ํ ์ ๊ทผ ๊ถํ ์ง์
- ๏ฎ private, public, protected ์ค์ ํ๋
- ๏ฎ ๋ํดํธ๋ private
- ๏ฎ public : ๋ค๋ฅธ ๋ชจ๋ ํด๋์ค๋ ๊ฐ์ฒด์์ ๋ฉค๋ฒ์ ์ ๊ทผ์ด ๊ฐ๋ฅํจ์ ํ์
- ๏จ ํด๋์ค ๊ตฌํ๋ถ(class implementation)
- ๏ค ํด๋์ค์ ์ ์๋ ๋ชจ๋ ๋ฉค๋ฒ ํจ์ ๊ตฌํ
์์ฑ์ ํจ์์ ํน์ง
์๋ฉธ์ ํน์ง
์ ๊ทผ ์ง์ ์
ํจ์ ํธ์ถ์ ๋ฐ๋ฅธ ์๊ฐ ์ค๋ฒํค๋
์์ ํฌ๊ธฐ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด, ํจ์ ์คํ ์๊ฐ์ ๋นํด, ํธ์ถ์ ์ํด ์์๋๋ ๋ถ๊ฐ์ ์ธ ์๊ฐ ์ค๋ฒํค๋๊ฐ ์๋์ ์ผ๋ก ํฌ๋ค.
์์ ์ฝ๋ ์์ฑ 1)
#include<iostream>
#include<string>
using namespace std;
class Person{
private:
string name;
int age;
public:
//์
์ฑ์ 3๊ฐ
//๋ฉ์๋ ํ๊ฐ
string getName();
int getAge();
Person();
Person(string a, int b);
Person(string a);
Person(int length);
~Person();
};
Person::Person(){
name = "ํ์";
age = 20;
}
Person::Person(string a, int b) {
name = a; age = b;
}
Person::Person(string a) {
name = a;
age = 300;
}
string Person::getName(){
return name;
}
int Person::getAge(){
return age;
}
Person::~Person(){
cout<<name <<"์ด ์น๊ตฌ ์๋ฉธ."<<endl;
}
int main(){
Person ps, pa("์ฑ์ง",23), pt("๋ฏผ์");
cout <<"์ด๋ฆ : "<<ps.getName()<<",๋์ด = "<<ps.getAge()<<endl;
cout <<"์ด๋ฆ : "<<pa.getName()<<",๋์ด = "<<pa.getAge()<<endl;
cout <<"์ด๋ฆ : "<<pt.getName()<<",๋์ด = "<<pt.getAge()<<endl;
}
#include <iostream>
using namespace std;
class Circle {
public:
int radius;
Circle();
Circle(int r);
double getArea();
~Circle();
};
Circle::Circle(){ }
Circle::Circle(int r){
radius = r;
}
double Circle::getArea() {
return 3.14*radius*radius;
}
class Rectangle{
public:
int width;
int height;
double getArea();
double getArea3();
Rectangle();
Rectangle(int a, int b);
Rectangle(int length);
bool isSquare();
~Rectangle();
// bool isSquare();
// Rectangle();
// Rectangle(int a,int b);
};
//Rectangle::Rectangle(){ }
/*
Rectangle::Rectangle(int a,int b){
x = a; y = b;
if(x != y){
return false
}
return true
}
*/
Rectangle::Rectangle() {
width = 1;
height = 1;
}
Rectangle::Rectangle(int a, int b) {
width = a; height = b;
}
Rectangle::Rectangle(int length) {
width = height = length;
}
bool Rectangle::isSquare() {
if(width == height) return true;
else return false;}
double Rectangle::getArea(){
return width * height;
};
double Rectangle::getArea3(){
return (width*2)+(height*2);
};
Rectangle::~Rectangle(){
cout<<width * height <<"<์ ์ฌ๊ฐํ ์๋ฉธ"<<endl;
}
Circle::~Circle(){
cout<<radius <<"<์ ๋ฐ์ง๋ฆ ์ ์๋ฉธ"<<endl;
}
int main() {
Circle donut,pizza,pizza2(20);
donut.radius = 1; // donut ๊ฐ์ฒด์ ๋ฐ์ง๋ฆ์ 1๋ก ์ค์
double area = donut.getArea(); // donut ๊ฐ์ฒด์ ๋ฉด์ ์์๋ด๊ธฐ
cout << "donut ๋ฉด์ ์ " << area << endl;
pizza.radius = 30;
double area2 = pizza.getArea();
cout << "pizza ๋ฉด์ ์ " <<area2 <<endl;
area = pizza2.getArea();
cout << "๋ฐ์ง๋ฆ์ด "<<pizza2.radius<<" ์ด๋ฉด, pizza2 ๋ฉด์ ์ "<<area<<endl;
Circle ball;
ball.radius = 10; // pizza ๊ฐ์ฒด์ ๋ฐ์ง๋ฆ์ 30์ผ๋ก ์ค์
double area3 = ball.getArea(); // pizza ๊ฐ์ฒด์ ๋ฉด์ ์์๋ด๊ธฐ
cout << "ball ๋ฉด์ ์ " << area3 << endl;
Rectangle rect;
rect.width = 3;
rect.height = 5;
double area5 = rect.getArea();
double area6 = rect.getArea3();
cout << "์ฌ๊ฐํ์ ๋ฉด์ ์ "<<area5 <<endl;
cout <<"์ฌ๊ฐํ์ ๋๋ ๋" <<area6<<endl;
Rectangle rect1, rect2(3,5), rect3(3);
if(rect1.isSquare()) cout << "rect1์ ์ ์ฌ๊ฐํ์ด๋ค."<<endl;
if(rect2.isSquare()) cout << "rect2์ ์ ์ฌ๊ฐํ์ด๋ค."<<endl;
if(rect3.isSquare()) cout << "rect3์ ์ ์ฌ๊ฐํ์ด๋ค."<<endl;
return 0;
};
์์ ์ฝ๋ 2)
#include <iostream>
using namespace std;
class Add{
private:
char giho;
int num1;
int num2;
public:
int add(); //์ฐ์ฐ๊ฒฐ๊ณผ
Add(int a, int b,char c);
//~Add();
};
Add::Add(int a, int b, char c){
num1 = a, num2= b, giho = c;
}
int Add::add(){
return num1 + num2;
}
/*
Add::~Add(){
cout << giho <<" ๊ฐ ์๋ฉธ๋จ. "<<endl;
}
*/
class Sub{
private:
char giho;
int num1;
int num2;
public:
int sub(); //์ฐ์ฐ๊ฒฐ๊ณผ
Sub(int a, int b,char c);
// ~Sub();
};
Sub::Sub(int a, int b, char c){
num1 = a, num2= b, giho = c;
}
int Sub::sub(){
return num1 - num2;
}
/*
Sub::~Sub(){
cout << giho <<" ๊ฐ ์๋ฉธ๋จ. "<<endl;
}
*/
class Mul{
private:
char giho;
int num1;
int num2;
public:
int mul(); //์ฐ์ฐ๊ฒฐ๊ณผ
Mul(int a, int b,char c);
// ~Mul();
};
Mul::Mul(int a, int b, char c){
num1 = a, num2= b, giho = c;
}
int Mul::mul(){
return num1 * num2;
}
/*
Mul::~Mul(){
cout << giho <<" ๊ฐ ์๋ฉธ๋จ. "<<endl;
}
*/
class Div{
private:
char giho;
int num1;
int num2;
public:
int div(); //์ฐ์ฐ๊ฒฐ๊ณผ
Div(int a, int b,char c);
// ~Div();
};
Div::Div(int a, int b, char c){
num1 = a, num2= b, giho = c;
}
int Div::div(){
return num1 / num2;
}
/*
Div::~Div(){
cout << giho <<" ๊ฐ ์๋ฉธ๋จ. "<<endl;
}
*/
int main()
{
int num1,num2;
char giho;
// Add a; Sub b; Mul c; Div d;
while(1){
cout<<"๋ ์ ์์ ์ฐ์ฐ์๋ฅผ ์
๋ ฅํ์ธ์ >> "<<endl;
cin >> num1; cin >> num2; cin >> giho ;
if(giho == '+'){
Add a(num1,num2,giho);
cout << a.add()<<endl;
continue;
}else if(giho == '-'){
Sub b(num1,num2,giho);
cout << b.sub()<<endl;
continue;
}else if(giho == '*'){
Mul c(num1,num2,giho);
cout << c.mul()<<endl;
continue;
}
else if(giho == '/'){
Div d(num1,num2,giho);
cout << d.div()<<endl;
continue;
}else
cout<<"์๋ชป๋ ๊ธฐํธ ์
๋๋ค."<<endl;
break;
}
return 0;
}
๋๋ณด๊ธฐ
์ธ๊ฐ์ ํ์ผ๋ก ๋ถ๋ฆฌํด์ ์ธํด๋ฃจ๋ ํ๋ ๋ฐฉ๋ฒ
aa.h ํ์ผ
#include<iostream>
#include<string>
using namespace std;
class Account{
private:
string name;
int money;
int id;
public:
//์
์ฑ์ 3๊ฐ
//๋ฉ์๋ ํ๊ฐ
string getOwner(); //๊ธฐํ
int inquiry(); //์์ก
int deposit(int a); //+
int withdraw(int a); // -
Account();
Account(string a, int b,int c);
~Account();
};
bb.cpp ํ์ผ
#include "aa.h"
Account::Account(){
name = "";
money = 0;
id = 0;
}
Account::Account(string a, int b, int c) {
name = a; id = b; money = c;
}
string Account::getOwner(){
return name;
}
int Account::deposit(int a){
money += a;
return money;
}
int Account::inquiry(){
return money;
}
int Account::withdraw(int a){
money -= a;
return money;
}
Account::~Account(){
cout<<name <<"์ด ์น๊ตฌ ์๋ฉธ."<<endl;
}
test.cpp (main)
#include "bb.cpp"
int main(){
Account a("๊ธฐํ",1,5000), b("ํ์",2,3000);
b.deposit(30000) ;
a.deposit(50000);
cout << a.getOwner()<<"์ ์์ก์ "<<a.inquiry()<<endl;//์์ก์ 55000
cout << b.getOwner()<<"์ ์์ก์ "<<b.inquiry()<<endl;//์์ก์ 33000
a.withdraw(20000); //20000์ถ๊ธ
b.withdraw(1000); //20000์ถ๊ธ
cout <<a.getOwner()<<"์ ์์ก์"<<a.inquiry()<<endl; //์์ก์ 35000
cout <<b.getOwner()<<"์ ์์ก์"<<b.inquiry()<<endl; //์์ก์ 32000
return 0;
}
- ์ธ๋ผ์ธ(inline) ํจ์
์์ ํฌ๊ธฐ์ ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด, ํจ์ ์คํ ์๊ฐ์ ๋นํด์
ํธ์ถ์ ์ํด ์์๋๋ ์ถ๊ฐ์ ์ธ ์๊ฐ ์ค๋ฒํค๋๊ฐ ์๋์ ์ผ๋ก ์ปค์ง๋๋ค.
์ด๋ฅผ ์ํด ์ธ๋ผ์ธ ํจ์๋ผ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ์ต๋๋ค.
inline ํค์๋๋ก ์ ์ธ๋ ํจ์์ ๋๋ค.
์ธ๋ผ์ธ ํจ์๋ฅผ ํธ์ถํ๋ ๊ณณ์ ์ธ๋ผ์ธ ํจ์ ์ฝ๋๋ฅผ ํ์ฅํด ์ฝ์ ํฉ๋๋ค.
๋งคํฌ๋ก์ ์ ์ฌํ๋ฐ, ์ฝ๋ ํ์ฅ ํ ์ธ๋ผ์ธ ํจ์๋ ์ฌ๋ผ์ง๋๋ค.
์ธ๋ผ์ธ ํจ์๋ฅผ ํธ์ถํ๋ฉด,
ํจ์ ํธ์ถ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๋ ์กด์ฌํ์ง ์์ต๋๋ค.
๋ํ ํ๋ก๊ทธ๋จ์ ์คํ ์๋๊ฐ ๊ฐ์ ๋ฉ๋๋ค.
์์ฃผ ํธ์ถ๋๋ ์งง์ ์ฝ๋์ ํจ์ ํธ์ถ์ ๋ํ ์๊ฐ ์๋ชจ๋ฅผ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฐ์ํ
'Languages > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น | new delete | ๊ฐ์ฒด ๋์ ์์ฑ (0) | 2021.04.13 |
---|---|
[C++ ] ๊ฐ์ฒด ํฌ์ธํฐ | ํฌ์ธํฐ ๊ฐ์ฒด | ๊ฐ์ฒด ๋ฐฐ์ด ์์ (0) | 2021.04.06 |
[C++] Tic Tac Toe Game | ํฑํํ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ | ํฑํํ ๊ตฌํ (0) | 2021.03.24 |
[C++] C++๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ตํ๊ธฐ (0) | 2021.03.09 |
Contents
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค