본문 바로가기

VEDA 복습

VEDA 11일차 - C++

반응형

 

함수 오버로드

함수명이 같았도 파라미터(파라미터 데이터 타입, 순서 포함)가 다르다면 다른 함수로 구분된다. 반환 형식만으로는 구분이 되지 않는다.

 

디폴트 파라미터 : 매개변수 입력이 없을 때 입력되는 디폴트 값, 오버로드 되는 함수를 줄이는 역할을 한다.(반대로 디폴트 파라미터를 사용하는 경우, 파라미터 구분이 되지 않으면 오류가 발생한다.)

디폴트 파라미터는 뒤의 인수부터 차례대로 들어가야 한다.(안하는 경우 빌드 오류 발생)

 

생성자의 호출 순서

부모 클래스 생성자 -> 자식 클래스 생성자

X
	X()
    X(int)

XX
	XX()
    XX(int)
    XX(int m, int s) : X(m)
    
XX xx(); // X() - > XX()
XX xx(1); //X() -> XX(int)
XX xx(1, 2); //X(int) -> XX(int, int)

 

다중 상속은 하지 말고 컴포지션과 어그리게이션 해라

컴포지션 : part of, 다른 클래스로부터 상속 받는 것이 아닌 맴버 변수로 분리하는 것

어그리게이션 : has a, 분리된 클래스의 객체를 포인터나 레퍼런스 변수로 포함하는 것

 

가상 함수와 동적 바인딩

가상 함수 : 맴버 함수 가운데 자식 클래스에서 오버라이딩해야 하는 함수

 

super casting

부모 클래스 포인터로 자식 클래스를 할당받는 것은 괜찮다. 그러나 반대로 자식 클래스 타입으로 부모 클래스의 객체를 할당받는 것은 불가하다.(할당 받은 메모리를 온전히 사용하지 못한다.)

super casting을 하면 부모 클래스를 따라간다.

 

virtual : 가상함수, 포인터 중심으로 받았던 것이, 객체 중심으로 따라감, 즉 자식 클래스의 메서드 정의를 따름

#include <iostream>


using namespace std;

class X {
public:
	X() {
		cout << "X const" << endl;
	};
	virtual void func() { //virtual 키워드가 없으면 최상위 부모 함수를 부른다.
		cout << "X func" << endl;
	};
	virtual ~X() { //virtual 키워드를 선언하면 자동으로 오버라이딩 되는 함수들을 virtual이다.
		cout << "X dist" << endl;
	};
};

class XX : public X{
public:
	XX() {
		cout << "XX const" << endl;
	};
	void func() {
		cout << "XX func" << endl;
	};
	~XX() {
		cout << "XX dist" << endl;
	};
};

class XXX : public XX {
public:
	XXX() {
		cout << "XXX const" << endl;
	};
	void func() {
		cout << "XXX func" << endl;
	};
	~XXX() {
		cout << "XXX dist" << endl;
	};
};



int main() {

	X* px = new XXX();

	px->func();

	delete px;

	return 0;
}

 

pure virtual function : 오직 가상함수임을 나타내기 위해 표기한 함수

class X{ // abstract class
public:
	virtual void func(void) = 0; // pure virtual function
};

 

정적 바인딩 : 컴파일 시점에 동작하여 프로그램이 실행되는 동안 유지(ex) 일반 변수, 함수 등)

동적 바인딩 : 대상이 실행 시점에 결정되며 변결될 수 있음(ex) virtual function, 동적 메모리 할당)

 

추상 클래스와 정적 맴버

추상 클래스 : pure virtual function을 포함하고 있는 클래스, 자식 클래스를 통해서 사용해야 한다. 

정적 맴버 : static, 객체 선언 없이 바로 사용할 수 있음, 클래스에 속하나 특정 인스턴스에 종속되지 않음

Class::var or Class::function 형태로 사용

 

반응형

'VEDA 복습' 카테고리의 다른 글

VEDA 13일차 - C++  (0) 2025.04.02
VEDA 12일차 - C++  (0) 2025.04.01
VEDA 10일차 - C++  (0) 2025.03.28
VEDA 9일차 - C++ 프로그래밍  (0) 2025.03.27
VEDA 8일차 - C/C++ 보충  (0) 2025.03.26