C++

13주차 강의 내용

wlsn 2024. 11. 26. 11:51

부모는 protected, 자식은 public으로 하는 것이 보편적이다.

 

C++에서 가상함수의 구현을 overriding이라고 한다.

 

overriding에서 virtual을 써야지 public에 있는게 써진다.

 

변수,함수에 대한 메모리 할당, 함수호출이 발생 했을때 명령어들이 결정되는 시점을 바인딩이라고 부른다.

 

static을 안줘서 1010 1010 1010이 찍힌 모습.

 

static을 주자 없던 y값이 생긴 모습

 

static은 마치 시작프로그램과 비슷하다고 생각하면 된다. 컴파일을 시작할 때 미리 자리를 잡고있기 때문이다.

실행할때는 16줄을 건너뛰고 실행이 된다. 왜냐하면 이미 컴파일을 시작했을 때 정해졌기 때문이다.

 

1010을 찍고 난 후 지역변수를 벗어나 x는 쓰레기값으로 바뀌지만 static으로 고정된 y는 11로 y++이 된 모습이다.

 

결과적으로 sub()를 3개를 써서 1010 1011 1012가 찍히게 된다.

 

멤버변수 앞에 static을 쓴다면 정적멤버변수로 바뀐다.

*객체들이 정보를 공유할 목적으로 사용하는 변수*

 

멤버변수는 각 개체마다 따로 생성되고

멤버함수는 모든 객체가 공유함.

 

사람으로 치면 나이,얼굴, 다리, 팔 같은 명사적인 사항이 멤버변수고 숨쉬기, 뛰기 등 동사적이고 공통적인 사항이 멤버함수라고 할 수 있다.

 

객체들을 공유하고 싶을 때 static을 붙여 공유하게 할 수 있다.

 

#include <iostream>
using std::cout;
class Point {
	int x;
	int y;
	static int count; //선언
public:
	Point() { cout << ++count; }
	~Point() { cout << --count; }
};
int Point::count = 0; //정의
int main()
{
	Point p1, p2, p3;
	return 0;
}

이 소스를 Python Tutor에 넣었을 때

 

123210이 찍히게 된다.

 

int Point::count = 0;을 주석처리한다면 오류가 뜨게된다.

6번째 줄에 static이 이미 선언되어 있기 때문에 class밖에 정의를 해줘야 오류가 생기지 않는다.

 

virtual부분은 overriding, public에 기능이 달라지는 것은 overloading이다.

 

 

순수가상함수를 갖는 클래스를 추상클래스라고 한다.

추상클래스는 객체를 만들 수 없어 주석처리로 바꾸고 다시 실행을 한다면

 

이와 같은 결과가 나온다.

 

순수가상함수는 'virtual', 뒤에 =0 을 붙이면 만들 수 있고 추상클래스를 정의하는데 사용함하지만 인스턴스는 생성불가능(불안정하기 때문에)

 

virtual을 추가하고 override는 생략이 가능하지만 써주는것이 좋다.

 

왼쪽의 결과는 Dot클래스 Dot이지만 오른쪽은 Dot클래스 line으로 바뀐다.

'C++' 카테고리의 다른 글

14주차 강의 내용  (0) 2024.12.03
14주차 예습과제  (0) 2024.12.03
13주차 예습과제  (0) 2024.11.26
12주차 강의내용  (0) 2024.11.19
12주차 예습과제  (0) 2024.11.18