[C++] 6.1 string, 상속

Sireal·2022년 3월 10일
0
post-thumbnail

따라하자 씹어먹는 C++


string 라이브러리

  • C++ 의 기본 라이브러리로 string.h 를 지원한다.
  • C에서 안되던 기능들이 정말 많이 들어가있는데,
    • 문자열 비교 strcmp() 함수를 안쓰고, == 으로 만 문자열 비교를 할 수 있게 됐다.
    • std::string 변수로 쉽게 string 변수를 만들 수 있다.
    • 좋다..

상속

클래스를 만들때 비슷한 클래스를 만들일이 생긴다.
하드코딩을 하게 되면 클래스를 그냥 복사해서 비슷하게 쓰면된다.
근데 우리는 경험상 하드코딩은 결국 골아픈 결과를 낳는것을 알고있다.

'상속'이라는 것을 사용해보자.

  • 기반(부모) 클래스
    • 기반이 되는 클래스
  • 파생(자식) 클래스
    • 기반 클래스의 것을 상속받은 파생 클래스
    • C++에서는 여러부모를 상속할 수 있기때문에 그냥 파생클래스라고 부른다.

상속의 예

기반 클래스

class Base{
	std::string s;
    
    public:
    Base() : s("기반){
    	std::cout << "기반클래스"<< std::endl;
    }
    void what(){ std::cout << s << std::endl;}
}

위의 기반클래스를 상속받아보자.
파생 클래스

class Derived : public Base{
	std::string s;
    
    public:
    Derived() : Base(), s("파생"){
    	/*
        Base 에서 what()을 물려받았으니, 
		Derived 에서도 당연히 호출 가능
        */
        what()
    }
}
  • class Derived : public Base 라는 것을 먼저 보자.
    • Derived가 Base를 public 형식으로 받겠다는 의미
    • 위의 상속받은 친구의 코드는 이렇게 됩니다.

위의 기반, 파생클래스의 모양은 이렇다

  • (상속) 파생클래스가 Base클래스의 모든것을 그냥 가져왔고, 사용가능해졌다.
  • 거기에 파생클래스에 자신만의 string과 생성자도 만들었다.
    • 이렇듯 상속을 받으면 굳이 코드를 복사 안해도 기반클래스의 것을 사용하고, 더할 수 있다.

위의 코드를 기반으로 main문을 짜서 결과를 보면 이렇다.

int main() {
    std::cout << " === 기반 클래스 생성 ===" << std::endl;
    Base p;

    std::cout << " === 파생 클래스 생성 ===" << std::endl;
    Derived c;

    return 0;
}

  • what() 함수를 파생클래스에서 다시 정의했습니다.
  • what() 함수가 파생클래스의 what()으로 불러져 나오네요.
    • 기반클래스의 것을 파생클래스의 것으로 덮어씌워 쓰는 것을 오버라이딩 이라고 합니다.
    • 오버로딩 은 같은 이름의 함수를 사용하며, 매개변수를 달리하여 여러가지 함수로 만드는 것 이고,
      오버라이딩은 그냥 덮어쓰기입니다.

protected

클래스를 상속 받는다 해도, 파생클래스가 기반클래스의 private 변수를 건들 수 없습니다.

하지만 protected 변수는 파생클래스도 건들 수 있습니다.

씹어먹는C++ 설명이 아주 찰져서 긁어왔습니다.

구분설명
private(부모님한테도 안알려주는)나만의 비밀번호
protected집현관문 번호(가족들은 아는데 이외사람들 접근불가)
public누구나 접근가능
  • 오우 시원시원한 설명...
profile
달리다 넘어져도 아픔마저 즐기려하는 사람

0개의 댓글