07.15

신승빈·2022년 7월 17일
1

KGCA 수업

목록 보기
8/128

class와 struct

class의 기본 접근 권한자는 private.
struct의 기본 접근 권한자는 public.
이외의 차이는 없음.

접근 권한자(private, protected, public)

안전성, 추상화

생성자,소멸자

구조체에서도 생성자, 소멸자 사용 가능.

컴파일러가 생성하는 기본 생성자

GCC - 초기화 수행
MSVC - 초기화 수행 안함. 초기화되지 않은 지역변수 사용 에러.

new-delete, malloc-free

new-delete는 생성자-소멸자 호출.
malloc-free는 메모리 할당 해제만 수행.

class에서의 초기화

class Container
{
	Test arr(10);
};

class 내부에서 기본적인 초기화는 가능하지만 위의 형식은 불가능.
정의 부분에서 메모리 할당을 시도하는 것이 문제인 듯.

inline 키워드

여러 translation unit에서 중복으로 정의되었더라도 모두 동일한 것이므로 그 중에서 아무거나 사용 가능을 의미.
ODR(유일 정의 규칙)을 무시하도록 허용.

참고 : https://othereum.github.io/c/c++/inline/

참고

class Test
{
	void func() { cout << "test"; } //묵시적 inline
};

함수의 선언과 정의가 분리되지 않았다면 묵시적 inline처리가 된다.
실제로 inline되는지는 compiler가 결정한다.

참고

//.h
class Test
{
	static int val;
};
//.cpp
Test::int val = 0;

class static 변수는 범위 밖에서 초기화를 수행해야 한다.

상속과 접근지정자

참고

//.h
class Child : private Parent
{
	//...
};
//main.cpp
int main()
{
	Parent* p = new Child;//접근 불가
};

private 상속자의 용도?

class Stack : private LinkedList
{
public:
	void push(int val) { push_back(val); }
};

Has-a관계가 아닌 Is-a관계를 재정의 할 때 사용하기 유용할 듯.

friend 키워드

class Parent
{
public:
	int publicVal;
private:
	int privateVal;
};

class Child : private Parent
{
	friend class FriendClass;
};

class FriendClass
{
	Child c;
    void func()
    {
    	c.publicVal = 10;	//접근 가능
        c.privateVal = 10;	//접근 불가
    }
};

friend 키워드는 friend한 클래스의 private변수에 접근 가능.

class TValue
{
private:
	friend class TToken;
	TValue(TCHAR*);
};

TValue는 TToken만의 전용 클래스로 사용.

연산자 재정의와 friend

class Test
{
	Test& operator*(int val);			//t1 * 2
    friend operator(int val, Test& t);	//2 * t1
};

friend를 통해 위치에 상관없이 연산자 재정의 사용이 가능함.

전방선언

전방 선언이란 클래스, 함수가 실제로 필요로 할 때 정의를 제공하겠다는 컴파일러와의 약속.

class RetClass;
class ParamClass1;
class ParamClass2;
class ParamClass3;
class Test
{
	RetClass func(ParamClass1* pc1, ParamClass2& pc2, ParamClass3 pc3);
};

객체 생성이 아닌 선언 정도를 위해서는 전방 선언만 사용해도 상관 없음.
cpp파일 중 전방선언한 객체에 실제로 접근하는 시점에 include 필요.
Header에 include를 최대한 줄이므로서 컴파일 시간을 단축시키는 장점이 있음.

참고 : http://egloos.zum.com/sweeper/v/2827565

profile
이상을 길잡이 삼아 로망을 추구합니다.

0개의 댓글