hugDog
Android DevLog
hugDog
전체 방문자
였늘
μ–΄μ œ
  • πŸ™Œ Hello? (162)
    • πŸ§©μ•ˆλ“œλ‘œμ΄λ“œ (12)
      • κ°œλ… 정리 (5)
      • 버그 ν•΄κ²° (4)
      • 기타 (3)
    • πŸ”μ•Œκ³ λ¦¬μ¦˜ (54)
      • κ°œλ… (0)
      • λ°±μ€€ (48)
      • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (6)
    • πŸ“„κ°œλ°œ 일지 (0)
      • FINPO (0)
    • πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (71)
      • C++ 정리 (49)
      • C++κΈ°μ΄ˆν”ŒλŸ¬μŠ€ μ—°μŠ΅λ¬Έμ œ (20)
      • Kotlin (2)
    • ⭐Project (1)
    • 🚴TIL (13)
      • Clean Code (13)
    • πŸš©κΈ°νƒ€ (9)
      • λͺ©ν‘œ (6)
      • 일상 (3)
      • λ¬Έμ„œ (0)

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
hugDog

Android DevLog

πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리

C++ 정리 - 30 (μƒμ„±μž μ‚¬μš©ν•˜κΈ°, λ””ν΄νŠΈ μƒμ„±μž, 파괴자, c++11의 리슀트 μ΄ˆκΈ°ν™”, const 멀버 ν•¨μˆ˜, this 포인터, 객체 λ°°μ—΄, 클래슀 μ‚¬μš© λ²”μœ„, λ²”μœ„κ°€ μ •ν•΄μ§„ μ—΄κ±°(c++11))

2020. 11. 2. 20:41
728x90

μƒμ„±μž μ‚¬μš©ν•˜κΈ°

1. Stock food = Stock("World Cabbage",250,1.25);

2. Stock garment("Furry Mason",50,2.5);

 

newλ₯Ό μ‚¬μš©ν•  λ•Œ μƒμ„±μž μ‚¬μš©ν•˜λŠ” 법

Stock *pstock = new Stock("Ele G",18,19.0);

 

μƒμ„±μžλŠ” 객체에 μ˜ν•΄ ν˜ΈμΆœλ˜λŠ” 것이 μ•„λ‹ˆλΌ, 객체λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

 

λ””ν΄νŠΈ μƒμ„±μž

λ””ν΄νŠΈ μƒμ„±μžλŠ” λͺ…μ‹œμ μΈ μ΄ˆκΈ°ν™” 값을 μ œκ³΅ν•˜μ§€ μ•Šμ„ λ•Œ 객체λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μƒμ„±μžμ΄λ‹€.

Stock fluffy_the_cat; //λ””ν΄νŠΈ μƒμ„±μž μ‚¬μš©

 

μ‚¬μš©μžκ°€ μ–΄λ– ν•œ μƒμ„±μžλ„ μ •μ˜ν•˜μ§€ μ•Šμ„ κ²½μš°μ—λ§Œ μ»΄νŒŒμΌλŸ¬κ°€ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μ œκ³΅ν•œλ‹€.

 

μƒμ„±μžλ₯Ό μ •μ˜ν•œ ν›„ λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μ •μ˜ν•˜λŠ” 두 κ°€μ§€ 방법

1. 기쑴의 μƒμ„±μžμ— μžˆλŠ” λͺ¨λ“  λ§€κ°œλ³€μˆ˜μ— λ””ν΄νŠΈ 값을 제곡

Stock(const string &co = "Error",int n=0,double pr=0.0);

2. ν•¨μˆ˜ μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜μ—¬ λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” 또 ν•˜λ‚˜μ˜ μƒμ„±μžλ₯Ό μ •μ˜

Stock();

 

μ‚¬μš©μžλŠ” ν•˜λ‚˜μ˜ λ””ν΄νŠΈ μƒμ„±μžλ§Œ κ°€μ§ˆ 수 μžˆμœΌλ―€λ‘œ 두 κ°€μ§€ 방법을 λ‹€ μ‚¬μš©ν•˜μ—¬ 두 개의 λ””ν΄νŠΈ μƒμ„±μžλ₯Ό λ§Œλ“€λ©΄ μ•ˆ λœλ‹€.

 

λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μ•”μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•  λ•ŒλŠ” κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆ λœλ‹€.

Stock second(); //ν•¨μˆ˜λ₯Ό 선언함

 

파괴자

객체의 수λͺ…이 λλ‚˜λŠ” μ‹œμ μ—μ„œ, ν”„λ‘œκ·Έλž¨μ€ νŒŒκ΄΄μžλΌλŠ” νŠΉλ³„ν•œ 멀버 ν•¨μˆ˜λ₯Ό μžλ™μœΌλ‘œ ν˜ΈμΆœν•œλ‹€.

 

μƒμ„±μžμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ, νŒŒκ΄΄μžλ„ νŠΉλ³„ν•œ 이름을 κ°€μ§„λ‹€.

μ•žμ— 틸데(~)κ°€ λΆ™λŠ” 클래슀 μ΄λ¦„μœΌλ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„λ‹€.

(Stock 클래슀의 νŒŒκ΄΄μžλŠ” ~Stock()이닀.)

μƒμ„±μžμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ νŒŒκ΄΄μžλ„ 리턴 값을 κ°€μ§ˆ 수 μ—†κ³  μ„ μ–Έλœ λ°μ΄ν„°ν˜•μ„ κ°–μ§€ μ•ŠλŠ”λ‹€.

κ·ΈλŸ¬λ‚˜ νŒŒκ΄΄μžλŠ” λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§€λ©΄ μ•ˆ λœλ‹€.

 

Stock νŒŒκ΄΄μžλŠ” 아무것도 μ—†λŠ” ν•¨μˆ˜λ‘œ μ½”λ”© κ°€λŠ₯

Stock::~Stock()

{}

νŒŒκ΄΄μžκ°€ μ–Έμ œ ν˜ΈμΆœλ˜λŠ”μ§€ μ•Œ 수 μžˆλ„λ‘ ν•˜κΈ° μœ„ν•΄, 파괴자λ₯Ό λ‹€μŒκ³Ό 같이 μ½”λ”©ν•  수 μžˆλ‹€.

Stock::~Stock()

{

cout<<"μ•ˆλ…•, "<<company<<"!\n";

}

일반적으둜 μ‚¬μš©μžκ°€ μ½”λ“œμ— λͺ…μ‹œμ μœΌλ‘œ 파괴자λ₯Ό ν˜ΈμΆœν•˜λ©΄ μ•ˆ λœλ‹€.

 

클래슀 객체의 수λͺ…이 λ‹€ν–ˆμ„ λ•Œ νŒŒκ΄΄μžλŠ” μžλ™μœΌλ‘œ 호좜되기 λ•Œλ¬Έμ—, λ°˜λ“œμ‹œ νŒŒκ΄΄μžκ°€ μžˆμ–΄μ•Ό ν•œλ‹€.

μ‚¬μš©μžκ°€ 파괴자λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©΄, μ»΄νŒŒμΌλŸ¬κ°€ λ””ν΄νŠΈ 파괴자λ₯Ό μ„ μ–Έν•œλ‹€. 객체λ₯Ό νŒŒκ΄΄ν•˜λŠ” μ½”λ“œλ₯Ό λ°œκ²¬ν•˜λ©΄, μ»΄νŒŒμΌλŸ¬λŠ” κ·Έ 파괴자λ₯Ό μœ„ν•œ μ •μ˜λ₯Ό μ œκ³΅ν•œλ‹€.

 

객체의 값을 μ΄ˆκΈ°ν™”λ‘œ μ„€μ •ν•  μˆ˜λ„ 있고 λŒ€μž…μœΌλ‘œλ„ μ„€μ • κ°€λŠ₯ν•˜λ©΄, μ΄ˆκΈ°ν™”λ₯Ό μ‚¬μš©ν•˜λŠ” 게 더 νš¨μœ¨μ μ΄λ‹€.

-> μ΄ˆκΈ°ν™”λŠ” μž„μ‹œ 객체λ₯Ό μƒμ„±ν•œ ν›„ κ·Έ μž„μ‹œ 객체λ₯Ό 객체에 λ³΅μ‚¬ν•˜κ±°λ‚˜, μž„μ‹œ 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  λ°”λ‘œ 객체의 값을 μ΄ˆκΈ°ν™”ν•¨. λŒ€μž…μ€ 항상 μž„μ‹œ 객체λ₯Ό μƒμ„±ν•œ ν›„ 객체에 볡사함.

 

c++11의 리슀트 μ΄ˆκΈ°ν™”

c++11μ—μ„œλŠ” μ€‘κ΄„ν˜Έ μ•ˆμ˜ κ°’λ“€κ³Ό μƒμ„±μžμ˜ λ§€κ°œλ³€μˆ˜λ“€μ„ λ§€μΉ­ μ‹œν‚€λŠ” 것을 μ œκ³΅ν•œλ‹€.

Stock hot_tip={"Dddd",100,45.0};

Stock jock{"Sport Age Storage,Inc"};

Stock *pc=new Stock{"aaa",32,1.3};

 

const 멀버 ν•¨μˆ˜

λ‹€μŒκ³Ό 같은 μ½”λ“œ λ‹¨νŽΈμ„ κ°€μ •

const Stock land = Stock("Kludgehorn");

land.show();

 

μ»΄νŒŒμΌλŸ¬λŠ” const 이기 λ•Œλ¬Έμ— λ³€κ²½ν•˜λ©΄ μ•ˆ λ˜λŠ” 호좜 객체λ₯Ό show()κ°€ μˆ˜μ •ν•  수 있기 λ•Œλ¬Έμ— μ‹€ν–‰λ˜μ§€ μ•ŠμŒ.

ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό const μ°Έμ‘°λ‚˜ constλ₯Ό μ§€μ‹œν•˜λŠ” ν¬μΈν„°λ‘œ ν•΄κ²°ν•˜μ˜€μ§€λ§Œ, μ—¬κΈ°μ„œλŠ” κ΅¬λ¬Έμƒμ˜ 문제 λ•Œλ¬Έμ— ν•΄κ²° λΆˆκ°€.

c++ 이 이것을 ν•΄κ²°ν•˜λŠ” 방법은 κ΄„ν˜Έ 뒀에 const ν‚€μ›Œλ“œλ₯Ό λ„£λŠ” 것

void show() const;

 

ν•¨μˆ˜ μ •μ˜μ˜ μ‹œμž‘ 뢀뢄도 λ‹€μŒκ³Ό κ°™λ‹€.

void Stock::show() const

 

μƒμ„±μžμ™€ νŒŒκ΄΄μžμ— λŒ€ν•œ μš”μ•½

Bozo(const char *fname,const char *lname); //μƒμ„±μž μ›ν˜•

 

이 경우 λ‹€μŒκ³Ό 같이 μ΄ˆκΈ°ν™” κ°€λŠ₯

Bozo boz=Bozo("Boz","Big"); //κΈ°λ³Έ ν˜•μ‹

Bozo fufu = ("fufu","Od"); //짧은 ν˜•μ‹

Bozo *pc=new Bozo("popo","Le P"); //동적 객체

 

μ΄ˆκΈ°ν™” 리슀트

Bozo boz=Bozo{"Boz,...

Bozo fufu={"...

Bozo *pc = new Bozo{"...

 

μƒμ„±μžκ°€ ν•œ 개의 맀개 λ³€μˆ˜λ§Œ κ°€μ§„λ‹€κ³  κ°€μ •

Bozo dribble = Bozo(44);

Bozo roon(66);

Bozo tubby=32;

 

λ””ν΄νŠΈ μƒμ„±μžλŠ” λ§€κ°œλ³€μˆ˜κ°€ μ—†κ³ , μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šκ³  객체λ₯Ό 생성할 λ•Œ μ‚¬μš©. μ‚¬μš©μžκ°€ μ–΄λ– ν•œ μƒμ„±μžλ„ μ œκ³΅ν•˜μ§€ μ•ŠμœΌλ©΄, μ‚¬μš©μžλ₯Ό λŒ€μ‹ ν•˜μ—¬ μ»΄νŒŒμΌλŸ¬κ°€ λ””ν΄νŠΈ μƒμ„±μž μ •μ˜. μ‚¬μš©μžκ°€ μ œκ³΅ν•˜λŠ” λ””ν΄νŠΈ μƒμ„±μžλŠ” μ–΄λ–€ λ§€κ°œλ³€μˆ˜λ„ μ‚¬μš©ν•˜μ§€ μ•Šκ±°λ‚˜, λͺ¨λ“  λ§€κ°œλ³€μˆ˜μ— λ””ν΄νŠΈ 값을 μ œκ³΅ν•΄μ•Ό 함.

 

객체가 파괴될 λ•Œ 파괴자λ₯Ό ν˜ΈμΆœν•¨

파괴자의 이름은 클래슀 이름 μ•žμ— (~)κ°€ 뢙은 것

클래슀 νŒŒκ΄΄μžλŠ” 클래슀 μƒμ„±μžκ°€ newλ₯Ό μ‚¬μš©ν•  λ•Œ ν•„μš”.

 

객체 듀여닀보기, this 포인터

ν•˜λ‚˜μ˜ λ©”μ„œλ“œκ°€ 두 개의 객체λ₯Ό λ™μ‹œμ— μ²˜λ¦¬ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ, c++은 thisλΌλŠ” 포인터λ₯Ό μ‚¬μš©

this ν¬μΈν„°λŠ” 멀버 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 데 μ‚¬μš©λœ 객체λ₯Ό μ§€μ‹œν•œλ‹€.

thisλŠ” κ·Έ 객체의 μ£Όμ†Œμ΄λ―€λ‘œ κ°μ²΄λŠ” *this둜 ν‘œν˜„λœλ‹€.

 

객체 λ°°μ—΄

객체 배열은 ν‘œμ€€ λ°μ΄ν„°ν˜•μ˜ 배열을 μ„ μ–Έν•˜λŠ” 것과 μ™„μ „νžˆ λ™μΌν•œ λ°©λ²•μœΌλ‘œ μ„ μ–Έν•œλ‹€.

Stock mystuff[4];

 

μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°°μ—΄ μ›μ†Œλ“€μ„ μ΄ˆκΈ°ν™”ν•  수 μžˆλ‹€.

각각의 μ›μ†Œμ— λŒ€ν•΄ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.

const int STKS=4;

Stock stock[STKS]={

Stock("nono",12.4,20),

Stock("Boff",32.2,10),

...

};

 

ν΄λž˜μŠ€κ°€ μƒμ„±μžλ₯Ό ν•˜λ‚˜ 이상 κ°€μ§€κ³  μžˆμ„ 경우,

λ°°μ—΄μ˜ 각 μ›μ†Œλ§ˆλ‹€ μ„œλ‘œ λ‹€λ₯Έ μƒμ„±μž μ‚¬μš© κ°€λŠ₯

const int STKS=10;

Stock stock[STKS]={

Stock("nono",12.4,20),

Stock(),

...

};

 

클래슀 μ‚¬μš© λ²”μœ„

클래슀 μ‚¬μš© λ²”μœ„λŠ” 클래슀 데이터 λ©€λ²„λ“€μ˜ μ΄λ¦„μ΄λ‚˜ 클래슀 멀버 ν•¨μˆ˜λ“€μ˜ 이름과 같이, 클래슀 μ•ˆμ—μ„œ μ •μ˜λ˜λŠ” 이름듀에 μ μš©λœλ‹€. 클래슀 μ‚¬μš©λ²”μœ„λ₯Ό κ°–λŠ” 것듀은 클래슀 μ•ˆμ—μ„œλ§Œ μ•Œλ €μ§„λ‹€. 예λ₯Ό λ“€μ–΄ Stock 클래슀의 shares λ©€λ²„λŠ” Job클래슀의 shares 멀버와 μ™„μ „νžˆ λ‹€λ₯Έ λ³€μˆ˜μ΄λ‹€. λ˜ν•œ 클래슀 μ‚¬μš© λ²”μœ„λŠ” μ‚¬μš©μžκ°€ λ°”κΉ₯ μ„Έκ³„μ—μ„œ 클래슀의 멀버듀에 직접 μ ‘κ·Ό λΆˆκ°€λŠ₯ν•˜λ‹€.

 

클래슀 μ‚¬μš© λ²”μœ„ ν•¨μˆ˜

class Stock {

private:

const int Months=12;//μ‹€νŒ¨ν•œλ‹€.

double costs[Months];

...

 

클래슀λ₯Ό μ„ μ–Έν•˜λŠ” 것은 객체가 μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ μ„œμˆ ν•˜λŠ” 것이지, κ·Έ 객체λ₯Ό μƒμ„±ν•˜λŠ” 것은 μ•„λ‹ˆλ―€λ‘œ μ‹€νŒ¨ν•œλ‹€.

κ·ΈλŸ¬λ‚˜, 이 문제λ₯Ό ν•΄κ²°ν•  두 κ°€μ§€ 방법이 μžˆλ‹€.

 

1. 클래슀 μ•ˆμ— 열거체 μ„ μ–Έ κ°€λŠ₯

class Bakery

{

private:

enum{Months=12};

double consts[Months];

...

 

μ—¬κΈ°μ„œ μ‚¬μš©λ˜λŠ” μ—΄κ±°μ²΄λŠ”, 열거체 λ³€μˆ˜λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ 것이 μ•„λ‹ˆλΌ λ‹¨μˆœνžˆ 기호 μƒμˆ˜λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ κ²ƒμœΌλ‘œ, 열거체 νƒœκ·Έλ₯Ό μ œκ³΅ν•  ν•„μš”κ°€ μ—†λ‹€.

 

2. μ΅œκ·Όμ— c++λŠ” ν‚€μ›Œλ“œ staticλ₯Ό μ‚¬μš©ν•˜μ—¬ 클래슀 μ•ˆμ— μƒμˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 방법을 λ„μž…ν•¨

class Bakery

{

private:

static const int Months=12;

double costs[Months];

...

 

λ²”μœ„κ°€ μ •ν•΄μ§„ μ—΄κ±°(c++11)

enum egg{Small,Medium,Large};

enum t_shirt{Small,Medium,xlarge};

이 ꡬ문은 μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ λͺ»ν•œλ‹€.

 

c++11μ—μ„œλŠ” μƒˆλ‘œμš΄ μ—΄κ±°μž ν˜•μ‹μ„ μ œκ³΅ν•˜μ—¬ μ—΄κ±°μžμ—κ²Œ 클래슀 λ²”μœ„λ₯Ό κ°–κ²Œ ν•¨μœΌλ‘œμ¨ μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°

enum class egg{Small,Medium,Large};

enum class t_shirt{Small,Medium,xlarge};

 

또 λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ, 클래슀 λŒ€μ‹  struct ν‚€μ›Œλ“œ μ‚¬μš© κ°€λŠ₯

두 κ°€μ§€ λͺ¨λ‘ μ—΄κ±°μžλ₯Ό μΆ©μ‘±μ‹œν‚€κΈ° μœ„ν•΄μ„  enum 이름 μ‚¬μš©ν•΄μ•Ό 함.

egg choice=egg::Large;

t_shirt Floyd=t_shirt::Large;

 

일반적인 μ—΄κ±°λŠ” 일뢀 μƒν™©μ—μ„œλŠ” μžλ™μ μœΌλ‘œ intν˜•μœΌλ‘œ μ „ν™˜λœλ‹€. κ·ΈλŸ¬λ‚˜, λ²”μœ„κ°€ μ§€μ •λœ μ—΄κ±°λŠ” intν˜•μœΌλ‘œ μ•”μ‹œμ  λ³€ν™˜μ΄ 이루어지지 μ•ŠμŒ. κΌ­ ν•„μš”ν•˜λ‹€λ©΄ λͺ…μ‹œμ  λ³€ν™˜ κ°€λŠ₯.

728x90
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ (μƒˆμ°½μ—΄λ¦Ό)
    'πŸ”€ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 정리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • C++ 정리 - 32 (ν”„λ Œλ“œ:<<μ—°μ‚°μžμ˜ μ˜€λ²„ λ‘œλ”©, μžλ™ λ³€ν™˜κ³Ό 클래슀의 λ°μ΄ν„°ν˜• λ³€ν™˜, λ³€ν™˜ ν•¨μˆ˜(conversion function), ν΄λž˜μŠ€μ™€ 동적 λ©”λͺ¨λ¦¬ λŒ€μž…, νŠΉλ³„ 멀버 ν•¨μˆ˜, λ””ν΄νŠΈ μƒμ„±μž)
    • C++ 정리 - 31 (좔상화 λ°μ΄ν„°ν˜•(abstract data type, ADT), μ—°μ‚°μž μ˜€λ²„λ‘œλ”©, ν”„λ Œλ“œμ˜ λ„μž…)
    • C++ 정리 - 29 (객체와 클래슀, μ ˆμ°¨μ‹ ν”„λ‘œκ·Έλž˜λ°κ³Ό 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°, 좔상화와 클래슀, c++의 클래슀, 클래슀 λ©€λ²„ν•¨μˆ˜μ˜ κ΅¬ν˜„, 인라인 λ©”μ„œλ“œ, 클래슀 μ„ μ–Έμ˜ 일반적인 ν˜•μ‹, 클래슀 생성..
    • C++ 정리 - 28 (new μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ μ΄ˆκΈ°ν™”, μœ„μΉ˜ μ§€μ • new μ—°μ‚°μž, 이름 곡간, using μ„ μ–Έκ³Ό using μ§€μ‹œμž, 이름 곡간에 λŒ€ν•œ 보좩)
    hugDog
    hugDog
    μ•ˆλ“œλ‘œμ΄λ“œ 곡뢀 쀑인 ν•™μƒμž…λ‹ˆλ‹€!

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”