😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[객체 포인터와 객체 λ°°μ—΄, 객체의 동적 생성] this 포인터와 string λ¬Έμžμ—΄ μ‚¬μš© λ³Έλ¬Έ

πŸ‘©‍πŸ’» IoT (Embedded)/C++

[객체 포인터와 객체 λ°°μ—΄, 객체의 동적 생성] this 포인터와 string λ¬Έμžμ—΄ μ‚¬μš©

μ§•μ§•μ•ŒνŒŒμΉ΄ 2024. 2. 22. 00:43
728x90
λ°˜μ‘ν˜•

<ν™©κΈ°νƒœ λ‹˜μ˜ λͺ…ν’ˆ C++ Programming μ„œμ μ„ μ°Έκ³ ν•΄μ„œ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

 

🐍 this ν¬μΈν„°

β˜‘οΈ this λŠ” κ°μ²΄ μžμ‹ μ— λŒ€ν•œ ν¬μΈν„°
클래슀의 λ©€λ²„ ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μ‚¬μš©λœλ‹€
this λŠ” μ „μ—­ λ³€μˆ˜λ„ μ•„λ‹ˆκ³  ν•¨μˆ˜ λ‚΄μ— μ„ μ–Έλœ μ§€μ—­ λ³€μˆ˜λ„ μ•„λ‹ˆλ‹€
this λŠ” κ°μ²΄μ˜ λ©€λ²„ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ  λ•Œ, μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ³΄μ΄μ§€ μ•Šκ²Œ μ „λ‹¬λ˜λŠ” κ°μ²΄μ— λŒ€ν•œ μ£Όμ†Œμ΄λ‹€


β˜‘οΈ this 와 객체
this λŠ” κ°μ²΄ μžμ‹ μ— λŒ€ν•œ ν¬μΈν„°
μƒμ„±μž ν•¨μˆ˜μ˜ κ²½μš° this-> λŠ” μƒλž΅ κ°€λŠ₯

β˜‘οΈthis μ˜ ν•„μš”ν•œ κ²½μš°
1) λ©€λ²„ λ³€μˆ˜μ˜ μ΄λ¦„κ³Ό λ™μΌν•œ μ΄λ¦„μœΌλ‘œ λ§€κ°œ λ³€μˆ˜ μ΄λ¦„을 μ§“κ³ μž ν•˜λŠ” κ²½μš°
맀개 λ³€μˆ˜μ˜ μ΄λ¦„은 μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨μ˜ κ°•λ ₯ν•œ μ£Όμ„ μ—­ν• μ΄λ‹€

2) κ°μ²΄μ˜ λ©€λ²„ ν•¨μˆ˜μ—μ„œ κ°μ²΄ μžμ‹ μ˜ μ£Όμ†Œλ₯Ό λ¦¬ν„΄ν•  λ•Œ ν•„μš”ν•˜λ‹€
μ—°μ‚°μž μ€‘볡을 κ΅¬ν˜„ν•  λ•Œ, λ§Žμ΄ λ°œμƒν•œλ‹€

β˜‘οΈthis 의 μ œμ•½ 쑰건
this λŠ” ν΄λž˜μŠ€μ˜ λ©€λ²„ ν•¨μˆ˜μ—μ„œλ§Œ μ‚¬μš©ν•  μˆ˜ μžˆλ‹€
멀버 ν•¨μˆ˜λΌλ„ μ •μ  λ©€λ²„ ν•¨μˆ˜λŠ” this λ₯Ό μ‚¬μš©ν•  μˆ˜ μ—†λ‹€
정적 λ©€λ²„ ν•¨μˆ˜λŠ” κ°μ²΄κ°€ μƒμ„±λ˜κΈ° μ „에 ν˜ΈμΆœλ  μˆ˜ μžˆμœΌλ©°, μ •μ  λ©€λ²„ ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ” μ‹œμ μ—μ„œ ν˜„μž¬ κ°μ²΄λŠ” μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μˆ˜ μžˆκΈ° λ•Œλ¬Έμ΄λ‹€

β˜‘οΈμ»΄νŒŒμΌλŸ¬λŠ” this λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜λŠ”κ°€
this λŠ” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ νƒ„μƒν•˜λŠ” λ³€μˆ˜μ΄λ‹€
this λŠ” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ¬΅μ‹œμ μœΌλ‘œ μ‚½μž…λœ λ§€κ°œ λ³€μˆ˜μ΄λ‹€
μ»΄νŒŒμΌλŸ¬λŠ” κ°μ²΄μ˜ λ©€λ²„ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” λ¬Έμž₯을 λ³€ν™˜ν•˜μ—¬, ν•΄λ‹Ή κ°μ²΄μ˜ μ£Όμ†Œκ°€ λ§€κ°œ λ³€μˆ˜λ‘œ μ „λ‹¬λ˜λ„λ‘ λ§Œλ“ λ‹€

🐍 string 클래슀λ₯Ό μ΄μš©ν•œ λ¬Έμžμ—΄ μ‚¬μš©
1) C-슀트링
'\0' λ‘œ λλ‚˜λŠ” λ¬Έμž λ°°μ—΄μ„ λ¬Έμžμ—΄λ‘œ μ·¨κΈ‰ν•˜λŠ” λ°©λ²•
μ΄ˆκΈ°μ— ν• λ‹Ήλ°›μ€ λ©”λͺ¨λ¦¬ ν¬κΈ° μ΄μƒμ˜ λ¬Έμžμ—΄μ„ μ €μž₯ν•  μˆ˜ μ—†κΈ° λ•Œλ¬Έμ— μ–΄λ €μ›€μ΄ μžˆμŒ


2) string
C++ ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” ν΄λž˜μŠ€
λ¬Έμžμ—΄μ„ μ €μž₯ν•˜λŠ” λ²„퍼와 ν•¨κ»˜, λ¬Έμžμ—΄μ„ λ‹€λ£¨λŠ” ν•¨μˆ˜μ™€ μ—°μ‚°μžλ“€μ„ λ©€λ²„λ‘œ κ°€μ§€κ³  μžˆμŒ
λ¬Έμžμ—΄μ˜ ν¬κΈ°μ— λ§žμΆ”μ–΄ μŠ€μŠ€λ‘œ λ©”λͺ¨λ¦¬ ν¬κΈ°λ₯Ό μ‘°μ ˆν•˜λ―€λ‘œ νŽΈλ¦¬ν•˜λ‹€
str μ— μ €μž₯λ˜λŠ” λ¬Έμžμ—΄μ˜ ν¬κΈ°λ₯Ό μ—Όλ €ν•˜μ§€ μ•Šμ•„도 λœλ‹€

β˜‘οΈ string 객체 생성 및 좜λ ₯

string str;
string address("경기도 μ‹œν₯μ‹œ");
string copyAddress(address);



β˜‘οΈ string 객체가 가진 λ¬Έμžμ—΄ 좜λ ₯

cout << str;



β˜‘οΈ string 객체의 동적 생성
new μ™€ delete μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  λ°˜ν™˜ν•  μˆ˜ μžˆλ‹€

string *p = new string("C++");
p->append("great");
delete p;

 

// string 클래슀λ₯Ό μ΄μš©ν•œ λ¬Έμžμ—΄ 생성 및 좜λ ₯
#include <iostream>
#include <string>
using namespace std;

int main()
{
    // 슀트링 생성
    string str;
    string address("경기도 μ‹œν₯μ‹œ");
    string copyAdress(address);

    char text[] = {'L', 'O', 'V', 'E', '\0'};
    string title(text);

    // 슀트링 좜λ ₯
    cout << str << endl;
    cout << address << endl;
    cout << copyAdress << endl;
    cout << title << endl;
}

/*
경기도 μ‹œν₯μ‹œ
경기도 μ‹œν₯μ‹œ
LOVE

- this λŠ” 객체 μžμ‹ μ— λŒ€ν•œ 포인터
클래슀의 멀버 ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μ‚¬μš©λœλ‹€
this λŠ” μ „μ—­ λ³€μˆ˜λ„ μ•„λ‹ˆκ³  ν•¨μˆ˜ 내에 μ„ μ–Έλœ 지역 λ³€μˆ˜λ„ μ•„λ‹ˆλ‹€
this λŠ” 객체의 멀버 ν•¨μˆ˜κ°€ 호좜될 λ•Œ, μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ 보이지 μ•Šκ²Œ μ „λ‹¬λ˜λŠ” 객체에 λŒ€ν•œ μ£Όμ†Œμ΄λ‹€

- this 와 객체
this λŠ” 객체 μžμ‹ μ— λŒ€ν•œ 포인터
μƒμ„±μž ν•¨μˆ˜μ˜ 경우 this-> λŠ” μƒλž΅ κ°€λŠ₯

this 의 ν•„μš”ν•œ 경우
1) 멀버 λ³€μˆ˜μ˜ 이름과 λ™μΌν•œ μ΄λ¦„μœΌλ‘œ 맀개 λ³€μˆ˜ 이름을 μ§“κ³ μž ν•˜λŠ” 경우
맀개 λ³€μˆ˜μ˜ 이름은 μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨μ˜ κ°•λ ₯ν•œ 주석 역할이닀

2) 객체의 멀버 ν•¨μˆ˜μ—μ„œ 객체 μžμ‹ μ˜ μ£Όμ†Œλ₯Ό 리턴할 λ•Œ ν•„μš”ν•˜λ‹€
μ—°μ‚°μž 쀑볡을 κ΅¬ν˜„ν•  λ•Œ, 많이 λ°œμƒν•œλ‹€

- this 의 μ œμ•½ 쑰건
this λŠ” 클래슀의 멀버 ν•¨μˆ˜μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλ‹€
멀버 ν•¨μˆ˜λΌλ„ 정적 멀버 ν•¨μˆ˜λŠ” this λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€
정적 멀버 ν•¨μˆ˜λŠ” 객체가 μƒμ„±λ˜κΈ° 전에 호좜될 수 있으며, 정적 멀버 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ” μ‹œμ μ—μ„œ ν˜„μž¬ κ°μ²΄λŠ” μ‘΄μž¬ν•˜μ§€ μ•Šμ„ 수 있기 λ•Œλ¬Έμ΄λ‹€

- μ»΄νŒŒμΌλŸ¬λŠ” this λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜λŠ”κ°€
this λŠ” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ νƒ„μƒν•˜λŠ” λ³€μˆ˜μ΄λ‹€
this λŠ” μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ¬΅μ‹œμ μœΌλ‘œ μ‚½μž…λœ 맀개 λ³€μˆ˜μ΄λ‹€
μ»΄νŒŒμΌλŸ¬λŠ” 객체의 멀버 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” λ¬Έμž₯을 λ³€ν™˜ν•˜μ—¬, ν•΄λ‹Ή 객체의 μ£Όμ†Œκ°€ 맀개 λ³€μˆ˜λ‘œ μ „λ‹¬λ˜λ„λ‘ λ§Œλ“ λ‹€

- string 클래슀λ₯Ό μ΄μš©ν•œ λ¬Έμžμ—΄ μ‚¬μš©
1) C-슀트링
'\0' 둜 λλ‚˜λŠ” 문자 배열을 λ¬Έμžμ—΄λ‘œ μ·¨κΈ‰ν•˜λŠ” 방법
μ΄ˆκΈ°μ— 할당받은 λ©”λͺ¨λ¦¬ 크기 μ΄μƒμ˜ λ¬Έμžμ—΄μ„ μ €μž₯ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 어렀움이 있음

2) string
C++ ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” 클래슀
λ¬Έμžμ—΄μ„ μ €μž₯ν•˜λŠ” 버퍼와 ν•¨κ»˜, λ¬Έμžμ—΄μ„ λ‹€λ£¨λŠ” ν•¨μˆ˜μ™€ μ—°μ‚°μžλ“€μ„ λ©€λ²„λ‘œ 가지고 있음
λ¬Έμžμ—΄μ˜ 크기에 λ§žμΆ”μ–΄ 슀슀둜 λ©”λͺ¨λ¦¬ 크기λ₯Ό μ‘°μ ˆν•˜λ―€λ‘œ νŽΈλ¦¬ν•˜λ‹€
str 에 μ €μž₯λ˜λŠ” λ¬Έμžμ—΄μ˜ 크기λ₯Ό μ—Όλ €ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€

- string 객체 생성 및 좜λ ₯
string str;
string address("경기도 μ‹œν₯μ‹œ");
string copyAddress(address);

- string 객체가 가진 λ¬Έμžμ—΄ 좜λ ₯
cout << str;

- string 객체의 동적 생성
new 와 delete μ—°μ‚°μžλ₯Ό μ΄μš©ν•˜μ—¬ λ™μ μœΌλ‘œ μƒμ„±ν•˜κ³  λ°˜ν™˜ν•  수 μžˆλ‹€
string *p = new string("C++");
p->append("great");
delete p;
*/

 

🐍 string 객체에 λ¬Έμžμ—΄ μž…λ ₯
cin >> μ„ μ΄μš©ν•˜μ—¬ ν‚€λ³΄λ“œλ‘œλΆ€ν„° string κ°μ²΄μ— λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κΈ°
곡백 λ¬Έμžκ°€ μž…λ ₯λ©΄ κ·Έ μ•žκΉŒμ§€ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ 닀루기 λ•Œλ¬Έμ— 곡백 문자λ₯Ό ν¬ν•¨ν•˜λŠ” λ¬Έμžμ—΄ 읽어듀일 수 μ—†μŒ

 

β˜‘οΈ getline() μ „μ—­ λ³€μˆ˜λ‘œ κΈ΄ 라인의 λ¬Έμžμ—΄ μž…λ ₯λ°›κΈ°

// '\n' 을 λ§Œλ‚  λ•ŒκΉŒμ§€ ν‚€λ³΄λ“œ (cin) λ‘œλΆ€ν„° λ¬Έμžμ—΄ 읽어듀어 μ €μž₯ν•˜κΈ°
string name;
getline(cin, name, '\n');

 

// string λ°°μ—΄κ³Ό λ¬Έμžμ—΄ ν‚€ μž…λ ₯ μ‘μš©
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string names[5];

    for (int i = 0; i < 5; i++)
    {
        cout << "이름 >> ";
        getline(cin, names[i], '\n');
    }

    string latter = names[0];
    for (int i = 1; i < 5; i++)
    {
        if (latter < names[i])
        {
            latter = names[i];
        }
    }

    cout << "μ‚¬μ „μ—μ„œ κ°€μž₯ 뒀에 λ‚˜μ˜€λŠ” λ¬Έμžμ—΄μ€ " << latter << endl;
}

/*
이름 >> kim nam jun
이름 >> lee ga eun
이름 >> lee a rin
이름 >> tae hoon
이름 >> jung kook
μ‚¬μ „μ—μ„œ κ°€μž₯ 뒀에 λ‚˜μ˜€λŠ” λ¬Έμžμ—΄μ€ tae hoon

- string 객체에 λ¬Έμžμ—΄ μž…λ ₯
cin >> 을 μ΄μš©ν•˜μ—¬ ν‚€λ³΄λ“œλ‘œλΆ€ν„° string 객체에 λ¬Έμžμ—΄μ„ μž…λ ₯λ°›κΈ°
곡백 λ¬Έμžκ°€ μž…λ ₯λ””γ…—λ©΄ κ·Έ μ•žκΉŒμ§€ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ 닀루기 λ•Œλ¬Έμ— 곡백 문자λ₯Ό ν¬ν•¨ν•˜λŠ” λ¬Έμžμ—΄ 읽어듀일 수 μ—†μŒ
getline() μ „μ—­ λ³€μˆ˜λ‘œ κΈ΄ 라인의 λ¬Έμžμ—΄ μž…λ ₯λ°›κΈ°

// '\n' 을 λ§Œλ‚  λ•ŒκΉŒμ§€ ν‚€λ³΄λ“œ (cin) λ‘œλΆ€ν„° λ¬Έμžμ—΄ 읽어듀어 μ €μž₯ν•˜κΈ°
string name;
getline(cin, name, '\n');
*/
728x90
λ°˜μ‘ν˜•
Comments