TIL

[250109 TIL] 상속의 virtual 키워드

yoosorang 2025. 1. 9. 21:53

1️⃣ 알고리즘 코드카타

▪ assign 함수
기존 컨테이너의 모든 요소를 제거하고 새 데이터로 대체(크기 자동 재조정)

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> source = {1, 2, 3, 4, 5};
    vector<int> vec;

    // 5개의 요소를 10으로 초기화
    vec.assign(5, 10);
    
    // source의 내용을 destination에 복사
    vec.assign(source.begin(), source.end());
    
        return 0;
}


▪ copy 함수
기존 크기와 내용을 유지한 채 복사(크기 고정)

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> source = {1, 2, 3};
    vector<int> destination(5, 0); // 크기 5로 초기화

    // std::copy로 복사
    copy(source.begin(), source.end(), destination.begin());

    for (int val : destination) {
        cout << val << " "; // 출력: 1 2 3 0 0
    }

    return 0;
}

https://buly.kr/1c8Kh9Y

[두 개 뽑아서 더하기]

▪ 중복 없는 배열을 사용하고 싶을 땐 set!
https://buly.kr/7mAr1lP

[가장 가까운 같은 글자]

특정 문자의 인덱스를 저장하고 불러오고 싶을 땐 map!
https://buly.kr/7FQa5KW
[푸드파이트 대회]


2️⃣ 복습

▪ 오버로딩과 오버라이딩
오버로딩 : 캡슐화를 통해 사용자에게 단순한 인터페이스 제공(다른 매개변수로 동일한 동작)
오버라이딩 : 상속과 다형성을 구현하여 동일한 이름으로 다른 동작을 가능하게 함

 

▪ 포인터 산술 연산
포인터 타입에 따라 이동 단위(int는 4바이트 double은 8바이트…)가 달라지므로 주의

 

3️⃣추가 공부

🔹 상속의 virtual 키워드

virtual이 없는 함수:
  • 정적 바인딩으로 동작(컴파일 시간에 호출할 함수 결정)
  • 부모 포인터를 통해 호출하면 부모의 함수가 호출
virtual이 있는 함수:
  • 동적 바인딩으로 동작(런타임에 호출할 함수 결정) → 다형성 구현
  • 부모 포인터를 통해 호출하면 자식의 재정의된 함수가 호출
#include <iostream>
using namespace std;

class Parent {
public:
    virtual void show() {
        cout << "Parent's show function" << endl;
    }
};

class Child : public Parent {
public:
    void show() override {
        cout << "Child's show function" << endl;
    }
};

int main() {
    Parent* p = new Child();
    p->show(); // 출력: Child's show function (동적 바인딩)

    delete p;
    return 0;
}