티스토리 뷰

반응형

04-1 정보은닉(Information Hiding)

정보은닉의 이해

class Point

{

public:

intx;// 0이상 100이하

inty; //0이상 100이하

}

` 저의 좌표는 0이상 100이하가 되어야 하는데, 그렇지 못한 Point 객체가 있다

- 직사각형을 의미하는 Rectangle 객체가 좌 상단의 좌표 값이 우 하단의 좌표값보다 크다.

 

->제한된 방법으로만 접근을 허용을 해서 잘못된 값이 저장되지않도록 도와야 하고, 또 실수를 했을 때, 실수가 쉽게 발견되도록 해야한다.

 

멤버변수를 private로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의해서, 안전한 형태로 변수의 접근을 유도하는 것이 바로 '정보은닉'이며, 이는 좋은 클래시가 되기 위한 기본조건이 된다.

 

const 함수

int GetX() const;

int GetY() const;

->이 함수 내에서는 멤버변수에 저장된 값을 변경하지 않겠다.

 

class SimpleClass
{
private:
	int num;
public:
	void InitNum(int n)
    {
    	num=n;
    }
    int getNum()
    {
    	return num;
    }
    void ShowNum() const
    {
    	cout<<GetNum()<<endl;
    }
};

-> 컴파일 에러가 발생한다

ShowNum이 const로 선언됐기에 GetNum도 const로 선언해야 접근이 가능하다

'const함수 내에서는 const가 아닌 함수의 호출이 제한된다'

 

04-2 캡슐화(Encapsulation)

콘텍 600은 종합감기약 -> 코감기, 목감기, 몸살감기를 다 포함해야 하는가? 아니면 따로 설계를 해야하는가.

->범위를 지정하는 것이 어렵다.

 

04-3 생성자(Constructor)와 소멸자(Destructor)

생성자: 객체의 생성과 동시에 초기화

 

class Simpleclass
{
private:
	int num;
public:
	Simpleclass(int n)
	{
		num = n;
	}
	int Getnum() const
	{
		return num;
	}
};

-클래스 이름과 함수의 이름이 동일하다.

-반환형이 선언되어 있지 않으며, 실제로 반환하지 않는다.

-객체 생성시 딱 한번 호출된다.

 

생성자도 함수의 일종이니 오버로딩이 가능하다.

생성자도 함수의 일종이니 매개변수에 디폴트 값을 설정할 수 있다.

 

SimpleClass sc1();

->함수의 원형 선언과 헷갈리기에 하면 안된다.

 

멤버 이니셜라이저(member intializer)를 이용한 멤버 초기화

 

class Rectangle

{

private:

Point upleft;

Point lowRight;

public:

Rectangle::Recntangle(const int&x1, const int &y1, const int &x2, const int &y2)

}

 

 

Rectangle::Recntangle(const int&x1, const int &y1, const int &x2, const int &y2)

:upLeft(x1,y1), lowRight(x2,y2)

 

:upLeft(x1,y1), lowRight(x2,y2)를 붙여서 초기화를 해준다.

 

객체의 생성과정

1단계: 메모리 공간의 할당

2단계: 이니셜라이저를 이용한 멤버변수(객체) 초기화

3단계: 생성자의 몸체부분 실행

 

멤버 이니셜라이저(Member intializer)를 이용한 변수 및 const 상수(변수) 초기화

->const도 똑같이 그냥 가능하다.

 

이니셜라이저의 이러한 특징을 멤버변수로 참조자를 선언할 수 있게 합니다.

 

디폴트 생성자(Default Constructor)

객체가 되기 위해서는 반드시 하나의 생성자가 호출되어야 한다.

 

class AAA

{

private:

 int num;

public

 int GetNum{return num;}

};

 

class AAA

{

private:

 int num;

public

 AAA(){}//디폴트 생성자

 int GetNum{return num;}

};

 

생성자 불일치

void형으로 선언되는 디폴트 생성자는 생성자가 하나도 정의되어 있지 않을 때 삽입이 된다.

 

 private 생성자

클래스 내부에서만 객체의 생성을 허용하려는 목적으로 사용.

 

소멸자의 이해와 활용

객체 소멸시 반드시 호출되는 것이 소멸자이다.

 

소멸자의특징

-클래스 이름 앞에 ~가 붙은 형태의 이름을 갖는다.

-반환형이 선언되어 있지 않으며, 실제로 반환되지 않는다.

-매개변수는 void형으로 선언되어야 하기 때문에 오버로딩도, 디폴트 값 설정도 불가능하다.

 

04-4 클래스와 배열 그리고 this 포인터

 

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

class soSimple
{
private:
	int num;
public:
	soSimple(int n) :num(n)
	{
		cout << "num=" << num << ", ";
		cout << "address=" << this << endl;
	}
	void ShowSimpleData()
	{
		cout << num << endl;
	}
	soSimple* GetThisPointer()
	{
		return this;
	}
};

int main(void)
{
	soSimple sim1(100);
	soSimple* ptr1 = sim1.GetThisPointer();
	cout << ptr1 << ", ";
	ptr1->ShowSimpleData();

	soSimple sim2(200);
	soSimple* ptr2 = sim2.GetThisPointer();
	cout << ptr2 << ", ";
	ptr2->ShowSimpleData();
	return 0;
}

this는 이 객체의 주소값을 반환한다.

 

*this 포인터의 활용

private:

 int num;

public:

 void ThisFunc(int num)

 {

 this->num=207;

 num=105

 }

};

 

ThisFunc에서 프라이빗에 있는 num에 접근하려면 this를 사용하여 접근 가능.

파이썬에서 self랑 비슷하다!

 

 

04-5 OOP 단계별 프로젝트 02단계

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함