AcceleratedC++/Chapter11 | AcceleratedC++/Chapter13 |
1. Chapter 12 Making class objects act like values ¶
μΌλ°μ μΈ C++μ κΈ°λ³Έν λ°μ΄ν°μ²λΌ ν΄λμ€λ μ¬λ¬κ°μ§μ μ°μ°μλ₯Ό μ¬μ μ ν¨μΌλ‘μ¨ λ§μΉ κ°μ²λΌ λμνλλ‘ ν μ μλ€.
μ΄ μ₯μμλ μ¬λ¬κ°μ§ μ°μ°μ, νλ³νμ ν΄λμ€μ μ μμκ° μ μ΄νλ λ°©λ²μ λν΄μ λ°°μ΄λ€.
12μ₯μμλ string ν΄λμ€μ ν΄λ‘ λ²μ μΈ Str ν΄λμ€λ₯Ό μ μνλ€. Str ν΄λμ€λ string ν΄λμ€μ νλ³νκ³Ό μ°μ°μμ ꡬνμ μ΄μ μ λ§μΆμ΄μ μ μνλ€.
μ΄ μ₯μμλ μ¬λ¬κ°μ§ μ°μ°μ, νλ³νμ ν΄λμ€μ μ μμκ° μ μ΄νλ λ°©λ²μ λν΄μ λ°°μ΄λ€.
12μ₯μμλ string ν΄λμ€μ ν΄λ‘ λ²μ μΈ Str ν΄λμ€λ₯Ό μ μνλ€. Str ν΄λμ€λ string ν΄λμ€μ νλ³νκ³Ό μ°μ°μμ ꡬνμ μ΄μ μ λ§μΆμ΄μ μ μνλ€.
1.1. 12.1 A simple string class ¶
~cpp class Str { public: typedef Vec<char>::size_type size_type; Str() {} Str(size_type n, char c):data(n, c) { } Str(const char* cp) { std::copy(cp, cp+std::strlen(cp), std::back_inserter(data)); } template<class In> Str(In b, In e) { std::copy(b, e, std::back_inserter(data)); } private: Vec<char> data; }
λ§μ½ μμ±μκ° νλλΌλ μ‘΄μ¬νλ©΄ μ»΄νμΌλ¬λ μμμ κΈ°λ³Έ μμ±μλ₯Ό λ§λ€μ§ μλλ€. λ°λΌμ μλ¬΄λ° μΈμλ₯Ό λ°μ§ μλ κΈ°λ³Έ μμ±μλ₯Ό λ§λ€ νμκ° μλ€.
μ΄ ν΄λμ€λ λ³΅μ¬ μμ±μ, λμ μ°μ°μ, μλ©Έμκ° νλ λͺ¨λ μΌμ Vecν΄λμ€μ μΌμνλ€.
μ΄ ν΄λμ€λ λ³΅μ¬ μμ±μ, λμ μ°μ°μ, μλ©Έμκ° νλ λͺ¨λ μΌμ Vecν΄λμ€μ μΌμνλ€.
1.2. 12.2 Automatic conversions ¶
~cpp Str s("hello"); // sλ₯Ό μμ±νλ€. Str t = "hello"; // tλ₯Ό μ΄κΈ°ν νλ€. s = "hello"; // μλ‘μ΄ κ°μ sμ λμ νλ€.
ν΄λμ€λ κΈ°λ³Έμ μΌλ‘ λ³΅μ¬ μμ±μ, λμ
μ°μ°μμ κΈ°λ³Ένμ μ 곡νλ€. μμ ν΄λμ€λ μ΄λ° μ°μ°μ λν κΈ°λ³Έμ μΈ μ건μ λ§μ‘±νκΈ° λλ¬Έμ const char* κ° const Str& λ‘ λ³νλμ΄μ μ μμ μΌλ‘ λμνλ€.
μκΈ°μ ν΄λμ€μλ Str(const char*) νμ μ μμ±μκ° μ‘΄μ¬νκΈ° λλ¬Έμ μ΄ μμ±μκ° Str μμ κ°μ²΄λ₯Ό μμ±ν΄μ λ§μΉ μ¬μ©μ μ μ λ³ν(user-define conversion)μ²λΌ λμνλ€.
μκΈ°μ ν΄λμ€μλ Str(const char*) νμ μ μμ±μκ° μ‘΄μ¬νκΈ° λλ¬Έμ μ΄ μμ±μκ° Str μμ κ°μ²΄λ₯Ό μμ±ν΄μ λ§μΉ μ¬μ©μ μ μ λ³ν(user-define conversion)μ²λΌ λμνλ€.
~cpp s="hello" s=Str("hello"); // μ μμκ°μ²΄λ₯Ό λ§λ€μ΄μ λ§λ€μ΄μ§ μμκ°μ²΄κ° λν΄νΈ λ³΅μ¬ μμ±μλ₯Ό ν΅ν΄μ ν λΉλκ² λλ€.
1.3. 12.3 Str operations ¶
string μμ κ°λ₯νλ μ°μ°λ€
~cpp cin>>s; cout<<s; s[i]; s1 + s1
operator[] implementation
~cpp class Str{ public: // μ΄μ μ μμ±μλ€ char& operator[](size_type i) { return data[i]; } const char& operator[](size_type i) const { return data[i]; } private: Vec<int> data; };μ΄ κ΅¬νμ μΈλΆμ μΈ μλλ°©μμ λͺ¨λ Vec ν΄λμ€λ‘ μμνμλ€. λμ μ const ν΄λμ€μ const κ° μλ ν΄λμ€μ λν λ²μ μ μ 곡νμκ³ , νμ€ string ν¨μμμ μΌκ΄μ± μ μ§λ₯Ό μν΄μ string λμ μ char& νμ 리ν΄νλλ‘ νμμ.
1.3.1. 12.3.1 μ μΆλ ₯ μ°μ°μλ€ ¶
μ
λ ₯ μ°μ°μλ μΌκ²¬ κ°μ²΄μ μνλ₯Ό λ°κΎΈκΈ° λλ¬Έμ λ©€λ²ν¨μλ‘ μ μΈμ΄ λμ΄μΌ νλ€κ³ μκ°νκΈ° μ½λ€. κ·Έλ¬λ μ΄ν μ°μ°μμ κ²½μ° νλΌλ©ν°μ λ§΅νμ΄ μ’νμ κ²½μ° μ²«λ²μ§Έ μ°νμ κ²½μ° λλ²μ§ΈμΈμλ‘ λ°λλ°, μ΄λ κ² λ κ²½μ° λ©€λ²ν¨μλ‘ >>μ°μ°μλ₯Ό μ€λ²λ‘λ©νλ©΄ μ°λ¦¬κ° μνλ κ²°κ³Όλ₯Ό μ»μ μ μλ€.
~cpp cin>>s; cin.operator>>(s); // istream μ μ°λ¦¬κ° λ§λ κ°μ²΄κ° μλκΈ° λλ¬Έμ μ¬μ μν μ μλ€. s.operator>>(cin); // νμ€ istream μ ννκ° μλλ€. s>>cinμκΈ°μ κ°μ μ΄μ λ‘ operator>>λ λΉλ©€λ²ν¨μλ‘μ μ μΈμ΄ λμ΄μΌ νλ€.
~cpp std::istream& operator>>(std::istream&, Str&); std::ostream& operator<<(std::ostream&, const Str&); ostream& operator<<(ostream& os, const Str& s) { for(Str::size_type i=0; i!= s.size(); ++i) os<<s[i]; return os; }μμ μ μ²λΌ μ¬μ©νκΈ° μν΄μλ Str::size() κ° μ μ λμ΄μΌνλ€.
~cpp class Str{ public: size_type size() const { return data.size(); } // μ΄μ κ³Ό λμΌ }
1.3.2. 12.3.2 νλ λ(Friend) ¶
~cpp istream& operator>>(istream& is, Str& s) { s.data.clear(); // compile error. private λ©€λ²λ‘ μ κ·Ό char c; while(is.get(c) && isspace(c)) // μ λ ₯μ΄ μκ³ κ°μ΄ 곡백μ΄λΌλ©΄ 무μ ; if(is) { // EOFλ₯Ό λ§λλ©΄ μ λ ₯ μ€νΈλ¦Όμ false κ°μ 리ν΄νλ€. do s.data.push_back(c); // compile error. private λ©€λ²λ‘ μ κ·Ό while(is.get(c) && !isspace(C)); if(is) // μ λ ₯μ€ κ³΅λ°± λ¬Έμλ₯Ό λ§λ¬μ κ²½μ° λ°©κΈμ μ μ λ ₯μΌλ‘ λ€μ΄μλ νλ¬Έμλ₯Ό 무μνλ€. is.unget(); } return is; }μκΈ°μ ν¨μλ Str μλ£νμ μ λ ₯μ νκΈ° λλ¬Έμ Str νμ λν μ°κΈ° κΆνμ΄ νμνλ€. κ·Έλ¬λ 9.3.1μ μ²λΌ λ¨μν μ λ ₯ ν¨μλ₯Ό λ§λ€κ² λλ©΄ μΌλ° μ¬μ©μκ° κ°μ²΄μ λ΄λΆ ꡬ쑰λ₯Ό 건λ릴 μ μλ μΈν°νμ΄μ€λ₯Ό μ 곡νλ κΌ΄μ΄ λκΈ° λλ¬Έμ μ³μ§ λͺ»νλ€.
λ°λΌμ μ°λ¦¬λ operator>>λ₯Ό public λ©€λ²λ‘ λ§λ€κ³ dataμ λν μ°κΈ° κΆνμ κ°μ§κ² ν΄μλ μλλ€.
μ΄λ° κ²½μ°μ ν¨μλ₯Ό friend λ‘ μ μ νμ¬ ν΄κ²°νλ κ²μ΄ κ°λ₯νλ€.
ν¨μλ₯Ό friend λ‘ μ μνλ©΄ μΈμλ‘ λ°μ νμλν΄μλ νμ μ κ·Όμκ° λ¬΄μλλ€.
~cpp class Str { friend std::istream& operator>>(std::istream&, Str&); };friend ν¨μλ μ κ·Όμ μ΄ λ μ΄λΈμ μν₯μ λ°μ§ μκΈ° λλ¬Έμ μ΄λμ μ μΈμ ν΄λ 무κ΄νλ, κ°λ₯νλ©΄ ν΄λμ€ μ μΈμ μ΅μ΄ λΆλΆμ λλ κ²μ΄ μ’λ€.
1.3.3. 12.3.3 λ€λ₯Έ μ΄ν μ°μ°μλ€ ¶
operator+ ꡬμνκΈ°
~cpp s1 + s2 + s3;
- operator+λ κ° μΈμλ‘ λ°λ κ°μ²΄μ κ°μ λ³νμν€μ§ γ
€γ
γ
γ
λλ€. λ°λΌμ λΉλ©€λ²ν¨μλ‘ κ΅¬ννλ κ²μ΄ μ λΉνλ€.
- operator+λ μ°μ°μ κ²°κ³Όλ Str νμ 리ν΄ν΄μΌνλ€.
~cpp Str operator+(const Str&, const Str&);
κ·Έλ¦¬κ³ operator+=() μμλ ꡬνν΄μΌν νμκ° μλ€.
μ΄λ° μμ λ§μ‘±νλ Strμ μΈμ λ€μκ³Ό κ°λ€.
~cpp class Str { // input operator implemented in 12.3.2/216 friend std::istream& operator>>(std::istream&, Str&); public: Str& operator+=(const Str& s) { std::copy(s.data.begin(), s.data.end(), std::back_inserter(data)); return *this; } // as before typedef Vec<char>::size_type size_type; Str() { } Str(size_type n, char c): data(n, c) { } Str(const char* cp) { std::copy(cp, cp + std::strlen(cp), std::back_inserter(data)); } template <class In> Str(In i, In j) { std::copy(i, j, std::back_inserter(data)); } char& operator[](size_type i) { return data[i]; } const char& operator[](size_type i) const { return data[i]; } size_type size() const { return data.size(); } private: Vec<char> data; }; // output operator implemented in 12.3.2/216 std::ostream& operator<<(std::ostream&, const Str&); Str operator+(const Str&, const Str&);
μκΈ°μμ ꡬνλ operator+= λ Vecλ₯Ό copyν¨μλ₯Ό μ΄μ©ν΄μ ꡬννμλ€.
operator+λ operator+=λ₯Ό μ΄μ©ν΄μ λ€μκ³Ό κ°μ΄ κ°λ¨νκ² κ΅¬νμ΄ κ°λ₯νλ€.
~cpp Str operator+(const Str& s, const Str& t) { Str r =s; r += t; return r; }
μ§μλ³μλ‘ μμ±λ rλ₯Ό 볡μ¬μμ±μλ₯Ό ν΅ν΄ μμ±λ μμ κ°μ²΄λ‘ 리ν΄μν¨λ€.
1.3.4. 12.3.4 νΌν©-νμ ννμ(Mixed-type expression) ¶
~cpp Str greeting = "Hello, " + name + "!";μκΈ°μ λ¬Έμ₯μ λ€μκ³Ό λμΌν μμλ‘ λμνκ² λλ€.
~cpp Str temp1("Hello, "); Str temp2 = temp1 + name; Str temp3("!"); Str greeting = temp2 + temp3;μ΄λ°μμΌλ‘ λμνκ² νλ©΄ μμ λ³μμ μμ±μΌλ‘ μΈν μ€λ²ν€λκ° μλΉν¨μΌλ‘ μ μ μλ€. μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ string ν΄λμ€λ μλλ³νμ μμ‘΄νμ§ μκ³ , νΌμ°μ°μλ€μ λͺ¨λ μ‘°ν©μ λν΄ κ²°ν© μ°μ°μλ₯Ό μ 곡νλ€.
1.3.5. 12.3.5 μ΄ν μ°μ°μ μ€κ³νκΈ° ¶
μ΄νμ°μ°μλ₯Ό μ€κ³ν κ²½μ°μλ λ³ν(conversion)μ΄ λ§μ λμμ΄ λλ€.
μ΄νμ°μ°μλ λΉ λ©€λ²ν¨μλ‘ μ€κ³νλ κ²μ΄ μ’λ€. μ΄μ λ λ©€λ²ν¨μμ κ²½μ° μ²«λ²μ§Έ μΈμκ° κ°μ²΄μ νΉμ νμΌλ‘ κ³ μ λκΈ° λλ¬Έμ μλ νλ³νμ μ΄μ©ν μ μκΈ° λλ¬Έμ΄λ€. μ¦ λμΉμ±(symmetry)λ₯Ό μ μ§νλ κ²μ΄ κ°λ₯νλ€.
λ©€λ²ν¨μλ‘ μ΄μ©λλ κ²½μ° μ°ν νΌμ°μ°μκ° μλ νλ³νλμ΄ μ’νκ³Ό μΌμΉνμ§ μλ κ²κ³Ό κ°μ λ¬Έμ κ° λ°μν μ μλ€.
λ°λ©΄ λμ μ°μ°μλ μ°μ°μ κ²°κ³Όκ° νΉμ κ°μ²΄μ μν₯μ μ£Όμ΄μΌ νκΈ° λλ¬Έμ λ°λμ ν΄λμ€μ λ©€λ²ν¨μλ‘ μμ±νλ κ²μ΄ μ³λ€.
μ΄νμ°μ°μλ λΉ λ©€λ²ν¨μλ‘ μ€κ³νλ κ²μ΄ μ’λ€. μ΄μ λ λ©€λ²ν¨μμ κ²½μ° μ²«λ²μ§Έ μΈμκ° κ°μ²΄μ νΉμ νμΌλ‘ κ³ μ λκΈ° λλ¬Έμ μλ νλ³νμ μ΄μ©ν μ μκΈ° λλ¬Έμ΄λ€. μ¦ λμΉμ±(symmetry)λ₯Ό μ μ§νλ κ²μ΄ κ°λ₯νλ€.
λ©€λ²ν¨μλ‘ μ΄μ©λλ κ²½μ° μ°ν νΌμ°μ°μκ° μλ νλ³νλμ΄ μ’νκ³Ό μΌμΉνμ§ μλ κ²κ³Ό κ°μ λ¬Έμ κ° λ°μν μ μλ€.
λ°λ©΄ λμ μ°μ°μλ μ°μ°μ κ²°κ³Όκ° νΉμ κ°μ²΄μ μν₯μ μ£Όμ΄μΌ νκΈ° λλ¬Έμ λ°λμ ν΄λμ€μ λ©€λ²ν¨μλ‘ μμ±νλ κ²μ΄ μ³λ€.
1.4. 12.4 Some conversions are hazardous ¶
11.2.2 μμμ explicit ν€μλμ μ¬μ©μ μλ νλ³νμ μ΄μ©μ΄ λλ λ¨μΌ μΈμλ₯Ό λ°λ μμ±μμ νμλ₯Ό μ νν¨μΌλ‘μ¨ νλ‘κ·Έλλ¨Έκ° μμΉ μλ λ³νμ λ§λ κΈ°λ₯μ νλ€.
λ§μ½ explicit μΌλ‘ Vec ν΄λμ€μ Vec<T>::Vec(size_type n) μ μ μ νλ€κ³ κ°μ νκ³ λ€μμ μ½λλ₯Ό 보μ
μ€ν : 42κ°μ λΉ νμ ν λλ¦¬κ° κ·Έλ €μ§ κ²°κ³Ό
λ§μ½ explicit μΌλ‘ Vec ν΄λμ€μ Vec<T>::Vec(size_type n) μ μ μ νλ€κ³ κ°μ νκ³ λ€μμ μ½λλ₯Ό 보μ
~cpp Vec<string> p = frame(42);μλμ μλ : 42λΌλ κΈμμ ν λλ¦¬κ° μ²μ§ κ²°κ³Ό
μ€ν : 42κ°μ λΉ νμ ν λλ¦¬κ° κ·Έλ €μ§ κ²°κ³Ό
μΌλ°μ μΌλ‘ κ°μ²΄μ ꡬ쑰λ₯Ό κ²°μ νλ μμ±μλ explicit μΌλ‘ λ΄μ©μ ꡬμ±νλ κ²½μ°μλ μ묡μ μΈ μ€νμ΄ κ°λ₯νλλ‘ νλ κ²μ΄ μΌλ°μ μ΄λ€.
Vecμ κ²½μ°μ²λΌ size_type μ μΈμλ‘ λ°λ κ²½μ°μλ μμμ κ°μλΌλ ꡬ쑰λ₯Ό κ²°μ νκΈ° λλ¬Έμ explicit μ΄ μ λΉνλ€.
Vecμ κ²½μ°μ²λΌ size_type μ μΈμλ‘ λ°λ κ²½μ°μλ μμμ κ°μλΌλ ꡬ쑰λ₯Ό κ²°μ νκΈ° λλ¬Έμ explicit μ΄ μ λΉνλ€.
1.5. 12.5 Conversion operators ¶
ν΄λμ€μ μ μμλ€μ λͺ
μμ μΌλ‘ λ³ν μ°μ°μ(conversion operator)λ₯Ό μ μνμ¬ κ·Έ κ°μ²΄μ νμ
μ΄ λͺ©μ μΈ κ°μ²΄μ νμ
μΌλ‘ λ³ννλ κ²μ μ νλ κ²μ΄ κ°λ₯νλ€.
λ³ν μ°μ°μμ λͺ¨μμ operator λͺ©μ μ΄ λλ νμ μ μ΄λ¦μΌλ‘ μ μλλ€.
λ³ν μ°μ°μμ λͺ¨μμ operator λͺ©μ μ΄ λλ νμ μ μ΄λ¦μΌλ‘ μ μλλ€.
~cpp class Student_info { public: operator double(); // ... } ... vector<Student_info> vs; ... double d = 0; d += vs[i]; // μ΄μ κ°μ΄ νλ³νμ ν μ μλ€.
μ΄λ° μλ νλ³νμ΄ μ΄μ©λ νμ€ λΌμ΄λΈλ¬λ¦¬λ‘λ cin λ€ μ μλ€.
κ·Έλ°λ° istream ν΄λμ€λ istream::operator void*()λ₯Ό μ μνμ¬ λ§μ½ μ λ ₯μ λ¬Έμ κ° μμΌλ©΄ void* νμΌλ‘ 0μ κ·Έλ μ§ μμ κ²½μ°μλ void* λ₯Ό 리ν΄νκ² ν¨μΌλ‘μ¨ λ§μΉ bool νμ²λΌ μ¬μ©νλ κ²μ΄ κ°λ₯νλ€.
void*λ‘ λ¦¬ν΄κ°μ μ ν¨μΌλ‘μ¨ bool λ‘ μ νμ λ λνλλ μλν λ³ν(μ μνμΌλ‘μ) λ¬Έμ μ μ ν΄κ²°ν μ μλ€.
~cpp if (cin>>x) { /* ... */ } cin>>x if (cin) { /* ... */ }μ΄κ²½μ° istream μ void *λ₯Ό 리ν΄νκ² λλ€.
κ·Έλ°λ° istream ν΄λμ€λ istream::operator void*()λ₯Ό μ μνμ¬ λ§μ½ μ λ ₯μ λ¬Έμ κ° μμΌλ©΄ void* νμΌλ‘ 0μ κ·Έλ μ§ μμ κ²½μ°μλ void* λ₯Ό 리ν΄νκ² ν¨μΌλ‘μ¨ λ§μΉ bool νμ²λΌ μ¬μ©νλ κ²μ΄ κ°λ₯νλ€.
void*λ‘ λ¦¬ν΄κ°μ μ ν¨μΌλ‘μ¨ bool λ‘ μ νμ λ λνλλ μλν λ³ν(μ μνμΌλ‘μ) λ¬Έμ μ μ ν΄κ²°ν μ μλ€.
void* νμ
μ ν¬μΈν°λ μ΄λ€ κ°μ²΄λΌλ κ°λ¦¬ν¬ μ μλ ν¬μΈν° μ΄λ―λ‘ μ λλ²μ
ν¬μΈν°(universal point)λΌκ³ λΆλ₯Έλ€. κ·Έλ¬λ κ·Έλ¬λ ν¬μΈνΈλ₯΄ μμ°Έμ‘°νλ κ²μ λΆκ°λ₯νλ€. κ·Έλ¬λ bool νμ
μΌλ‘μ λ³νμ κ°λ₯νλ€.
1.6. 12.6 Conversions and memory management ¶
char*, const char* νμΌλ‘μ λ³ν
κ·Έλ λ€κ³ ν΄μ dataκ° κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό λ°λ‘ λκΈ°λ©΄ νλ‘κ·Έλ¨μμ κ·Έ ν¬μΈν°λ₯Ό ν΅ν΄μ λ°μ΄ν°μ μμ μ ν μ μκΈ° λλ¬Έμ μΊ‘μνμ μ₯μ μ΄ μ¬λΌμ§λ€.
μ΄ κ²μ ν΄κ²°ν λ°©λ²μ dataμ 볡μ¬λ³Έμ λ§λ€μ΄μ κ·Έ κ²μ 리ν΄νκ³ μ¬μ©μ΄ λλ λ€μλ 볡μ¬λ³Έμ μ κ±°νλ λ°©μμΌλ‘ ν΄κ²°μ΄ κ°λ₯νλ€.
κ·Έλ¬λ μ¬μ©μλ μ묡μ λ³νμ¬μ΄μμ μλ©Έ μμΌμΌν ν¬μΈν°λ₯Ό μ°Ύμ μ μλ€.
~cpp class Str{ public: operator char* (); operator const char* () const; // μ΄μ κ³Ό λμΌ private: Vec<char> data; }; Str s; ifstream in(s);νλ¨μ μ½λκ° μ¬λ°λ₯΄κ² λμνμ§ λͺ»νλ€. λ³νλλ νμ΄ μꡬλλ νκ³Ό μ ν λ§μ§ μκΈ° λλ¬Έμ΄λ€.
κ·Έλ λ€κ³ ν΄μ dataκ° κ°λ¦¬ν€λ ν¬μΈν°λ₯Ό λ°λ‘ λκΈ°λ©΄ νλ‘κ·Έλ¨μμ κ·Έ ν¬μΈν°λ₯Ό ν΅ν΄μ λ°μ΄ν°μ μμ μ ν μ μκΈ° λλ¬Έμ μΊ‘μνμ μ₯μ μ΄ μ¬λΌμ§λ€.
μ΄ κ²μ ν΄κ²°ν λ°©λ²μ dataμ 볡μ¬λ³Έμ λ§λ€μ΄μ κ·Έ κ²μ 리ν΄νκ³ μ¬μ©μ΄ λλ λ€μλ 볡μ¬λ³Έμ μ κ±°νλ λ°©μμΌλ‘ ν΄κ²°μ΄ κ°λ₯νλ€.
κ·Έλ¬λ μ¬μ©μλ μ묡μ λ³νμ¬μ΄μμ μλ©Έ μμΌμΌν ν¬μΈν°λ₯Ό μ°Ύμ μ μλ€.
νμ€ string μ κ²½μ°μλ 3κ°μ§ μ’
λ£μ char* νμΌλ‘μ λ³νμ μ 곡νλλ°
c_str() | string λ΄λΆμ char*λ₯Ό 리ν΄νλ€. λ°λΌμ μ¬μ©μκ° deleteλ₯Ό ν μλ μμ§λ§ ν¬μΈν°λ₯Ό μ»μ΄μ μμ ν μ μλ€. |
data() | c_str()κ³Ό λΉμ·νμ§λ§ '\0'λ‘ μ’ λ£λλ λ¬Έμμ΄μ΄ μλ λ°°μ΄μ 리ν΄νλ€. |
copy(char* ) | μΈμλ‘ λ°μ char*μ 곡κ°μ λ΄λΆμ λ¬Έμ λ€μ 볡μ¬ν΄ λ£λλ€. char*곡κ°μ νλ‘κ·Έλ¨κ° ν λΉνκ³ ν΄μ νλ 곡κ°μ΄λ€. |