C++ Standard String & Inheritance.
1.C++ Standard string class
C 스타일의 문자열은 여러가지 문제점들이 많기 때문에 (예를 들어 문자열의 길이를 한 번에 알 수 없고 마지막 NULL 문자까지 하나 하나 읽어야 된다.) 문자열을 처리할 수 있는 새로운 무언가가 계속 필요해야 했다. 예전에 만든 MyString 클래스도 문자열 처리를 꽤나 훌륭하게 하지만, 실제로 속도가 매우 중요한 환경에서 그대로 쓰기에는 부족한 점이 많다.
대신에 string 이라는 빠르고, 안전하고 사용하기 매우 간단한 문자열 클래스가 표준으로 채택이 된다.
string은 매우 빠르고 안전함에도 사용방법은 간단하다.
#include
#include using namespace std; // 표준이므로 std 안에 string 이 정의. int main() { string s = "abc"; cout << s << endl; return 0; }
#include#include using namespace std; int main() { string s = "abc"; string t = "def"; cout << s << " 의 길이 : " << s.length() << endl; cout << s << " 뒤에 " << t << " 를 붙이면 : " << s + t << endl; if(s == s2) { cout << s << " 와 " << s2 << " 는 같다 " << endl; } if(s != t) { cout << s << " 와 " << t << " 는 다르다 " << endl; } return 0; }
문자열의 길이를 출력하는 length 함수라던지, 연산자 오버로딩을 사용해서 + 연산자가 실제로 문자열을 결합시키는 함수로 사용되고 있다.
특히 편리한 점으로 C 문자열이였을 경우 문자열을 비교하기 위해서 strcmp 함수를 사용해야 하고,
if(s == s2) cout << s << " 와 " << s2 << " 는 같다 " << endl;
if(s != t) cout << s << " 와 " << t << " 는 다르다 " << endl;
위 소스코드와 같이 == 나 != 로 비교하는 것이 불가능하다. (왜냐하면 이는 문자열의 주소값을 비교하는 것이다!)
하지만 string 클래스는 == 와 != 연산자들을 모두 오버로딩해서 제대로 비교를 수행한다. 뿐만 아니라 크기 비교 >=, <= 등도 제대로 수행이 된다.
2.C++ About inheritance
C++ 에서는 상속을 통해 다른 클래스의 정보를 물려 받아서 사용할 수 있다.
일단은 클래스를 먼저 만들어서 어떻게 C++ 에서 상속이라는 기능이 사용되는지 알아보도록 하겠다.
class Parent
{
string s;
public:
Parent () : s("부모")
{
cout << "부모 클래스" << endl;
}
void what() { cout << s << endl;}
};
class Child : public Parent
{
string s;
public:
Child () : s("자식"), Parent()
{
cout << "자식 클래스" << endl;
// Parent 에서 what() 을 물려 받았으므로
// Child 에서 당연히 호출 가능.
what();
}
};
위의 표와 같은 느낌이다.
Child () : s("자식"), Parent()
{
cout << "자식 클래스" << endl;
// Parent 에서 what() 을 물려 받았으므로
// Child 에서 당연히 호출 가능.
what();
}
cout << " === 자식 클래스 생성 ===" << endl; // Q
Child c;
===================================
Child () : s("자식"), Parent() //W
{
cout << "자식 클래스" << endl;
// Parent 에서 what() 을 물려 받았으므로
// Child 에서 당연히 호출 가능.
what();
}
Ex)
Parent 객체에서 parent_string 을 접근한다면 public 이므로 main 함수에서도 잘 접근할 수 있지만 Child 에서 parent_string 을 접근하려고 한다면, private 상속을 받았기 때문에 비록 Parent 에서 public 이더라도, Child 에서는 private 으로 처리되기에 접근할 수 없다.
'#Programming Language > C++' 카테고리의 다른 글
C++ Virtual functions and inheritance. (0) | 2018.04.01 |
---|---|
C++ Virtual function. (0) | 2018.04.01 |
C++ Various overloading part 2. (0) | 2018.04.01 |
C++ Various overloading. (0) | 2018.04.01 |
C++ Operator overloading. (0) | 2018.04.01 |