[Source Insight] 사용법

IDE/Source Insight 2010. 8. 23. 14:24
Source Insight 사용 하는 방법을 알아보겠다. Source Insight 를 사용하기 위해서는 Project 를 만들 필요가 있다.

1. Project > New Project 를 클릭하자.




2. 프로젝트 이름 및 저장 경로를 설정하고, OK 를 클릭한다.




3. 프로젝트를 만들고자 하는 경로에 해당 디렉토리가 없는 경우, 아래와 같이 디렉토리를 새로 하나 만들겠냐는 메시지 박스가 뜬다. "예" 를 선택하도록 하자.




4. 그냥 OK 를 누른다.



5. Source Insight 에서 볼 소스가 있는 경로를 선택하자. 오른쪽에 파일 목록이 나온다.
 여기서 Add Tree 버튼을 누르게 되면 해당 폴더 하위에 있는 부분이 모두 추가가 된다.




6. 이전 창을 닫으면 아래와 같이 두개의 파일이 프로젝트에 추가 된다며, 계속 할 것인지 묻는데, OK 를 누르도록 하자.




7. 아래와 같이 프로젝트에 추가될 2개의 파일목록이 아랫창에 뜨게 된다.



8. 위의 창을 닫으면, 아래와 같이 소스를 불러온다. 좌측에는 소스의 함수 목록 include 등의 정보를 보여주며, 가운데는 소스, 오른쪽에는 소스의 목록을 보여준다.


'IDE > Source Insight' 카테고리의 다른 글

[Source Insight] 개발 환경 설정  (2) 2010.08.24

설정

트랙백

댓글

HTTP and WWW

Programming/Network 2010. 8. 21. 10:30
HTTP와 WWW, 인터넷의 비약적인 발전을 일으킨 놈들이다.
기본적으로 서버와 클라이언트의 구조로 되어있다. 클라이언트( PC, Mobile Phone etc ) 가 서버에 요청을 하면 서버는 해당 웹페이지를 클라이언트에 전송해 주는 구조이다. request / response 라는 기본 개념에서 시작되었다. 그리고 각 웹페이지는 각 사이트(서버)에 존재를 하고, 우리는 이를 www 를 이용해서 각기 다른 host 에 요청을 하고, 원하는 웹페이지를 받는 것이다.
이 웹페이지를 보여주기 위해서, 해석하고 표현을 해주는 도구가 필요한데 이것이 바로 브라우저이다. 유명 브라우저에는 인터넷 익스프로러, 크롬, 파이어 폭스 등이 있다. 이러한 브라우저는 보통 제어기( controller ), 클라이언트 프로토콜 및 해석기( interpreter ) 의 세부분으로 나뉜다. 제어기는 키보드/마우스로부터 입력을 받아 클라이언트 프로그램을 사용하여 문서를 액세스 한다. 문서가 액세스 되고 난 뒤에는 해석기 중 하나를 사용하여 문서를 화면에 표시한다.
클라이언트 프로토콜은 FTP, HTTP 중에 하나가 될 수 있고, 해석기는 문서의 유형에 따라 HTML, Java or JavaScript 가 될 수 있다.

웹페이지를 엑세스 하기 위해서 URL ( Uniform Resource Locator ) 을 입력하는데, 이는 인터넷에서 어떤 종류의 정보든 지정할 수 있는 표준이다. 표준은 아래와 같다.
Protocol  : // Host : Port /  Path 

간단히 설명하자면
Protocol : FTP, HTTP
Host : 정보가 위치하고 있는 컴퓨터이다.
Port : URL 은 선택적으로 port 번호를 포함할 수 있다. 이는 콜론 으루 구분.
Path : 정보가 위치하고 있는 파일의 경로 이름이다.


쿠키
인터넷 웹사이트의 방문기록을 남겨 사용자와 웹사이트 사이를 매개해 주는 정보이다.
고객이 특정 홈페이지를 접속할 때 생성되는 정보를 담은 임시파일이며, 애초에 인터넷 사용자들의 홈페이지 접속을 위해 만들어졌다. 특정 사이트를 처음 방문하면 아이디와 비밀번호를 기록한 쿠키가 만들어지고 다음에 접속했을 때 절차 없이 사이트에 빠르게 연결 할 수 있다.
쿠키는 사용하는 웹브라우저가 자동으로 만들기도 하고 갱신하기도 하며, 웹사이트로 기록을 전달하기도 한다. 이용자가 인터넷에서 어떤 내용을 봤는지 어떤 상품을 봤는지 모든 정보가 기록이 된다. 따라서 이에 따른 보안 문제가 발생할 수 도 있다.

이러한 쿠키의 생성과 저장에 대해서 알아보겠자.


'Programming > Network' 카테고리의 다른 글

프록시 서버( proxy server )  (0) 2010.08.21
HTTP Method  (0) 2010.06.06
Post/Redirect/Get  (1) 2010.05.31
트랜잭션 [ transaction ] 이란?  (0) 2010.05.27
세션 [ session ] 이란?  (0) 2010.05.27

설정

트랙백

댓글

프록시 서버( proxy server )

Programming/Network 2010. 8. 21. 09:47

네트워크에서 프록시, 핸드폰에 wifi 를 쓸때도 프록시.. 여기저기서 프록시 라는 말이 자주 나온다. 그런데 정작 프록시가 뭐하는 건지 모르겠어서 마침내 찾아보게 되었다. ( -_-; 이놈의 게으름병..)
책을 보면 HTTP 는 프록시 서버를 지원한다고 한다. 즉.. 프록시는 서버를 뜻하는 것이었다. 프록시 서버는 최신 요청에 대한 응답들의 복사본을 가지고 있는 컴퓨터 이다. HTTP 클라이언트는 프록시 서버로 요청을 보내고, 프록시 서버는 캐시(cache)를 검사를 하는데, 이때 해당 응답이 서버에 있게 되면 해당 응답을 보내주고, 그렇지 않으면 적절한 서버로 요청을 보내고, 프록시 서버에 돌아온 응답을 클라이언트에게 보내주게 된다. 그리고, 다른 클라이언트의 요청에 대비해 프록시 서버에 응답이 저장된다. 이렇게, 프록시 서버는 컴퓨터의 캐시와 같은 존재로써, 서버의 부하를 줄이고, 트래픽을 감소하고 지연을 개선하는 목적으로 운영이 된다. 이러한 프록시 서버를 사용하기 위해서는 클라이언트가 대상 서버 대신에 프록시를 액세스 하도록 설정 되어 있어야 한다. 핸드폰에 WIFI 를 설정할 때도 보면, proxy 서버를 설정하는 부분이 옵션으로 들어가 있는 것을 볼 수 있을 것이다.

'Programming > Network' 카테고리의 다른 글

HTTP and WWW  (0) 2010.08.21
HTTP Method  (0) 2010.06.06
Post/Redirect/Get  (1) 2010.05.31
트랜잭션 [ transaction ] 이란?  (0) 2010.05.27
세션 [ session ] 이란?  (0) 2010.05.27

설정

트랙백

댓글

[C++] this 포인터 사용하기

Programming/C++ Language 2010. 7. 31. 18:56
연속적인 함수 호출을 위해 this 포인터를 사용해 보도록 하자.

SetHour, SetMinute, SetSecond 라는 함수가 있다고 했을 때, 3번의 각각의 호출이 필요하다.
이때, this 포인터를 반환하는 즉, this 참조 반환을 이용하면 연속적으로 호출이 가능하다.
아래의 예문을 살펴보자.


CTimes& CTimes::SetHour(int nHour)

 hour = nHour;
 
 return *this;
}

CTimes& CTimes::SetMinute( int m )
{
 minute = m;
 
 return *this;
}
 
CTimes& CTimes::SetSecond( int s )
{
 second = s;
 
 return *this;

위와 같이 Set 함수에 *this 를 반환을 하게 되면, 호출 하는 쪽에서 *this를 호출하여 연속적으로 아래와 같이 호출 할 수 있게 된다.

CTimes time;
 
 time.SetHour(10).SetMinute(20).SetSecond(30);
 
 time.Print();

특별히 성능이 좋아진다거나 그런 것은 없지만, 이를 알고 있다면 코드가 간단해서 보기 쉽지 않을까 생각한다. 앞으로 잘 이용하면 좋은 문법이 될 것 같다.

'Programming > C++ Language' 카테고리의 다른 글

Unique Pointer  (0) 2014.03.03
[C++] 동적바인딩( Dynamic binding )  (0) 2011.01.03
[C++] 참조 변수  (1) 2010.07.31
[C++] 참조 반환  (0) 2010.07.31
[C++] 클래스 I  (0) 2010.07.21

설정

트랙백

댓글

[C++] 참조 변수

Programming/C++ Language 2010. 7. 31. 17:22
참조 반환에 이어 참조 변수에 대해 알아보자.

참조 변수는 DataType& 를 이용하여 선언을 한다. 그리고, 어떤 변수의 참조를 가지도록 초기화할 때는 변수를 선언 할 때만 가능하다.

아래의 코드를 보고, 결과를 예상해 보자.

int a = 10, b = 20;
int& nRef = a;
  
cout << "a is " << a << endl;
 
nRef = 100;
 
cout << "a is " << a << endl;
 
nRef = b;
 
cout << "a is " << a << endl;
cout << "b is " << b << endl;

결과는 아래와 같다.( 상자 안을 마우스로 클릭하여 영역을 잡으면 보인다. )
a is 10
a is 100
a is 20
b is 20


결과 처럼, nRef = b 구문을 실행 할 떄는 nRef 가 b 변수를 참조 하는 것이 아니라, 이미 nRef 는 a 변수를 참조 하고 있으므로, b의 값을 a 에 대입을 하게 된다.


이러한 참조변수를 이용하여 Call by Reference 를 이용 할 수 있다. C에서는 Call by Reference 를 이용하기 위해서 포인터 변수를 사용했지만, C++ 에서는 대신에 참조변수를 이용하면 된다.
-> void Func( int& param1 ) {}

설정

트랙백

댓글

[C++] 참조 반환

Programming/C++ Language 2010. 7. 31. 16:54
C++ 의 문법 중의 하나인, 참조변수가 있다. 이를 잘못 사용하게 되면 객체지향의 규칙을 깨버릴 수 있다. 그리고, 컴파일 에러는 전혀 나지 않는다. 한번 살펴 보도록 하자.

Times.h
class CTimes
{
public:
   CTimes( int = 0, int = 0, int = 0 );
   ~CTimes();
   int& GetHour();
   void Print();

private:
   int hour;
   int minute;
   int second;
};

Times.cpp
int& CTimes::GetHour()
{
return hour;
}

void CTimes::Print()
{
cout << "hour is " << hour << endl;
}

위와 같이 Times 클래스가 선언이 되어 있고, GetHour 유틸리티 함수는 int형이 아니라 int& 즉, int 참조변수형을 리턴하고 있다.
이제, 아래의 Main 문을 보도록 하자. 세번의 출력 결과를 예상해 보자.

main.cpp
int main()
{
Ctimes time( 1, 2 );
time.Print();

int a = time.GetHour();
a = 5;
time.Print();

int& b = time.GetHour();
b = 10;
time.Print();

return 0;
}

출력 결과는 아래와 같다..( 상자 안을 마우스로 클릭하여 영역을 잡으면 보인다. )

hour is 1
hour is 1
hour is 10


즉, 참조 변수 형으로 변수를 받게 되면 참조형 변수는 private, public 여부에 관계없이 변경을 할 수 있다. 물론 Get 함수에서 포인터로 변수의 주소를 넘겨줄 경우, 받는 쪽에서 private 이든, public 이든 관계없이 이를 변경 시킬수 있다. 클래스 캡슐화를 위반하는 문법을 사용 하는 것을 피하도록 하자.

값을 받아서 사용 할 때의 문법상의 차이점 말고는 실질적인 원리는 어떻게 다른지 잘 모르겠다. 알아봐야겠다. :)

설정

트랙백

댓글

[Wireshark] 필터링 방법 - Display Filter

Tools/Wireshark 2010. 7. 31. 16:27

display 필터는 캡쳐된 데이터에서 원하는 정보를 찾을 때 사용합니다.
display 필터의 검색 능력은 capture 필터 보다 더 뛰어납니다. 그리고 필터의 내용을 바꾸고 싶을 때 캡쳐 작업을 다시 시작하지 않아도 됩니다.

Syntax: Protocol .
String 1
.
String 2
Comparison operator
Value
Logical Operations
Other expression
Example:
ftp
passive
ip
==
10.2.3.4
xor
icmp.type
Protocol:

OSI layer 2에서 layer 7 사이에 있는 매우 다양한 프로토콜을 사용 할 수 있습니다. 그것들은 메인 화면에 보이는 "Expression..." 버튼을 클릭하면 볼 수 있습니다.

wireshark filter expression

wireshark filter expression

아래에 보이는 그림에서 간단한 설명과 함께 지원 가능한 프로토콜들을 확인 할 수 있습니다:

wireshark supported protocols

wireshark supported protocols

Wireshark 웹사이트에서
프로토콜과 그것의 하위 카테고리에 대한 설명을 제공하고 있습니다.]

String1, String2 (선택 사항)

각 프로토콜의 하위 프로토콜 카테고리.
그것을 보기 위해서, 프로토콜을 선택한 뒤 "+" 표시를 클릭하세요.

wireshark filter expression

비교 연산자:

6개의 비교 연산자를 사용 할 수 있습니다:

영문 표기:  C언어 표기:  의미:
eq 
== 
같다
ne
!=
틀리다
gt
>
크다
lt
<
작다
ge
>=
크거나 같다
le
<=
작거나 같다
논리 표현 식:

영문 표기:  C언어 표기:  의미:
and
&&
논리곱
or
||
논리합
xor
^^
배타적 논리합
not
!
부정
프로그래머들이 잘 아는 "XOR"은 배타적 논리합 연산으로 사용됩니다. 두 가지 조건 사이에서 사용되었을 때, 두 가지 조건 중 오직 한가지만 만족했을 때 결과 화면에 보여집니다.
다음의 display 필터를 이용하여 예시를 보여드리겠습니다:
"tcp.dstport 80 xor tcp.dstport 1025"
목적지가 TCP 포트 80이거나 출발지가 TCP 포트 1025인 (두 가지 모두인 경우는 제외하고) 패킷이 결과로 화면에 나타납니다.



사용 예:

snmp || dns || icmp SNMP 혹은 DNS 혹은 ICMP 트래픽을 보여줍니다.
ip.addr == 10.1.1.1
출발지나 목적지의 IP 주소가 10.1.1.1인 패킷을 보여줍니다.

ip.src != 10.1.2.3 or ip.dst != 10.4.5.6
출발지의 IP 주소가 10.1.2.3이 아니거나 목적지의 IP 주소가 10.4.5.6이 아닌 패킷을 보여줍니다.
다른 말로 하자면, 화면에 보여지는 패킷은 다음과 같을 것입니다:
출발지 IP 주소 : 10.1.2.3이 아닌 모든 주소, 목적지 IP 주소 : 10.1.2.3이 아닌 모든 주소
그리고
출발지 IP 주소 : 모든 주소, 목적지 IP 주소 : 10.4.5.6이 아닌 모든 주소

ip.src != 10.1.2.3 and ip.dst != 10.4.5.6
출발지 IP 주소가 10.1.2.3이 아니면서, 동시에 목적지 IP 주소가 10.4.5.6이 아닌 패킷을 화면에 보여줍니다.
다른 말로 하자면, 화면에 보여지는 패킷은 다음과 같을 것입니다:
출발지 IP 주소 : 10.1.2.3이 아닌 모든 주소, 그리고 목적지 IP 주소 : 10.4.5.6이 아닌 모든 주소

tcp.port == 25 출발지와 목적지의 TCP 포트가 25인 패킷을 보여줍니다.
tcp.dstport == 25 목적지의 TCP 포트가 25인 패킷을 보여줍니다.
tcp.flags TCP 플래그를 가지고 있는 패킷을 보여줍니다.
tcp.flags.syn == 0x02 TCP SYN 플래그를 가지고 있는 패킷을 보여줍니다.
필터 구문에 문제가 없다면, 녹색으로 하이라이트 될 것이며, 잘못됐다면 붉은색으로 하이라이트 될 것입니다.

wireshark display filter example 올바른 구문
wireshark display filter example 잘못된 구문
display 필터에 대한 추가 정보는 Wireshark official websiteWiki Wireshark website에서 찾을 수 있습니다.

추가 ) http.request.method == "POST" 는 Http 중에 request method 가 POST 인 경우만 필터링을 해준다.

 출처 : http://openmaniak.com/kr/wireshark_filters.php#display

'Tools > Wireshark' 카테고리의 다른 글

[Wireshark] 필터링 방법 - Capture Filter  (0) 2010.07.31

설정

트랙백

댓글

[Wireshark] 필터링 방법 - Capture Filter

Tools/Wireshark 2010. 7. 31. 16:24

패킷을 캡쳐하는 툴인 Wireshark 에서 필수적으로 사용해야하는 필터링 방법에 대해서 알아보도록 하겠다.
 


먼저, 필터링을 하기 위해서는 좌측과 같이 Capture > Options 를 선택한다.










아래와 같이 Capture Filter 라는 란이 있는데 여기에 필터링 문법을 쓰면, 패킷 캡쳐를 시작하면서 필터링 규칙에 따라 캡쳐를 해서 보여준다. 



 

그리고, 프로그램의 메인 화면을 보면, 캡쳐한 패킷 위에 존재하는 Filter 라는 란이 있다. 여기는 패킷 캡쳐 할 때, 필터링을 하는 것이 아니라 이미 캡쳐한 패킷에서 필터를 해서 원하는 항목만 걸러서 보여주는 것이다. 즉, 이미 캡쳐한 패킷에서 검색하는 기능이라 봐도 무난 할 것이다. 

 
 여기서의 문법은 패킷 캡쳐 당시의 필터링 문법과 다른데 Expression 을 누르면 다양한 문법을 선택해서 검색해 볼 수 있다. 

먼저, 패킷 캡쳐 필터링 문법 부터 보도록 하겠다.
 

 Syntax Protocol  Direction  Host(s)  Value Logical Operations Other expression
 Example  tcp dst 128.11.33.4 80 and  tcp dst ip port 

 Protocol:
사용 가능한 값: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp. 프로토콜을 지정하지 않으면 모든 프로토콜을 사용합니다.

 Direction:
사용 가능한 값: src, dst, src and dst, src or dst
출발지나 목적지를 지정하지 않으면 "src or dst" 키워드가 사용됩니다.
예를 들어, "host 10.2.2.2"은 "src or dst host 10.2.2.2"과 동일합니다.

Host(s):
사용 가능한 값: net, port, host, portrange.
호스트를 지정하지 않으면 "host" 키워드가 사용됩니다.
예를 들어, "src 10.1.1.1"은 "src host 10.1.1.1"과 같은 의미입니다.

Logical Operations:
사용 가능한 값: not, and, or.
부정 연산("not")이 가장 높은 우선순위를 갖습니다. 논리합("or")과 논리곱("and")는 같은 우선순위를 가지며 왼쪽에서 오른쪽으로 처리됩니다.
예를 들어,
"not tcp port 3128 and tcp port 23"은 "(not tcp port 3128) and tcp port 23"과 동일하게 작용합니다.
"not tcp port 3128 and tcp port 23" 은 "not (tcp port 3128 and tcp port 23)"과는 동일하지 않습니다.

사용 예

tcp dst port 3128
: 목적지가 TCP 포트 3128인 패킷을 보여줍니다.

ip src host 10.1.1.1
: 출발지 IP 주소가 10.1.1.1인 패킷을 보여줍니다.

host 10.1.1.1
: 출발지와 목적지 IP 주소가 10.1.1.1인 패킷을 보여줍니다.

src portrange 2000-2500
: 출발지의 UDP, TCP 포트가 2000-2500 사이인 패킷을 보여줍니다.

not icmp
: icmp 패킷을 제외한 모든 패킷을 보여줍니다. (icmp는 보통 ping 프로그램에서 사용합니다.)

src host 10.7.2.12 and not dst net 10.200.0.0/16
: 출발지 IP 주소가 10.7.2.12이면서, 목적지 IP 네트워크가 10.200.0.0/16이 아닌 패킷을 보여줍니다.

(src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8
출발지 IP 주소가 10.4.1.12이거나, 출발지 네트워크가 10.6.0.0/16인 패킷중에서 목적지 TCP 포트 범위가 200-10000이면서, 목적지 IP 네트워크가 10.0.0.0/8인 패킷을 보여줍니다.


참고:

"\" 기호는 키워드 자체가 값을 나타낼 때 사용합니다.
"ether proto \ip"( \ip는 "ip"과 동일합니다.)
이것은 IP 프로토콜을 타켓으로 하게 됩니다.

"ip proto \icmp"(\icmp는 "icmp"과 동일합니다.)
이것은 일반적으로 ping 유틸리티에서 사용되는 icmp 패킷을 타켓으로 하게 됩니다.

"multicast"와 "broadcast" 키워드는 "ip" 나 "ether" 다음에 사용할 수 있습니다.
"no broadcast"는 broadcast 요청을 제외하고 싶을 때 유용하게 사용할 수 있습니다.

 출처 : http://openmaniak.com/kr/wireshark_filters.php#display

'Tools > Wireshark' 카테고리의 다른 글

[Wireshark] 필터링 방법 - Display Filter  (0) 2010.07.31

설정

트랙백

댓글

윈도우 7 정품 인증

Computer 2010. 7. 25. 16:21

파일 두개를 받아 압축을 푼다.

프로그램을 실행하면, 아래와 같이 압축을 풀게 된다.


그런 다음 아래와 같이 실행이 되며, 7을 누르고 엔터를 친다.


그리고 4를 누르고 엔터를 친다.


그리고 1을 누르고 엔터를 친다.


아래와 같이 7개의 항목을 다운 받으면서, 정품 인증을 받게 된다. :)


설정

트랙백

댓글

[C++] 클래스 I

Programming/C++ Language 2010. 7. 21. 15:42
생성자
: 기본 생성자를 호출하지 않거나, 만들지 않더라도 묵시적으로 호출 및 생성이 되어서 호출이 된다. 물론, 생성자가 만들어지지 않았을 경우, 아무동작도 하지 않는다.
: 생성자는 오버로드 가능하여 클래스 객체를 초기화 하는 다양한 방법을 제공한다.
: 디폴트 생성자 - 클래스당 하나의 디폴트 생성자가 존재 할 수 있다. 라고 책에 되어 있다. 사실상 컴파일 상에서는 디폴트 생성자가 여러개 존재 할 수 있다.
class CTimes
{
public:
~CTimes(void);
CTimes( int = 0, int = 0, int = 0 ); - ①
CTimes( int = 0, int = 0 ); - ②
....
}


그리고, CTimes time( 1, 2, 3 ); 을 호출하게 되면, ① 의 생성자가 호출 된다.
하지만, CTimes time( 1, 2 ); 을 호출하게 되면, "ambiguous call to overloaded function" 이라는 에러 문구를 보여준다. 애매한 호출을 한다는 것이다. time( 1, 2 ) 를 호출하면, ① 도 가능하고, ② 도 가능하다. 그러므로 컴파일러에서 혼돈을 하게 되는 것이다.

소멸자
: 생성자와 마찬가지로 명시적으로 만들지 않더라도, C++ 컴파일러에서 아무것도 하지 않는 디폴트 소멸자를 만들어준다.
: 소멸자는 오버로드가 불가능하다.

생성자, 소멸자 호출 순서
: 일반적으로 소멸자는 생성자가 호출되는 순서의 반대이다.
: 전역적으로 정의된 객체의 생성자는 main 함수를 비롯한 파일 내의 함수가 실행을 시작하기 전에 호출 된다. 그리고, 전역 객체의 생성자가 호출되는 순서는 보장되지 않는다.
: 전역 및 static 객체의 소멸자는 main 함수가 종료되거나, exit 함수가 호출될 때 호출된다.
: abort 함수를 호출하여 종료하게 되면, 전역 및 static 객체의 소멸자는 호출되지 않는다.
: static 지역 객체의 생성자는, main에서 해당 코드 부분이 수행될 때 호출이 되고,

Inline 함수
Class A
{
result GetResult() { return __r; }
result SetValue( int nVal ) { __val = nVal };
result SetField( String str );
}

inline result A::SetField( String str )
{
__str = str;
}
위와 같이, 빨간색의 멤버함수가 클래스 몸체에 정의 되어 있으면, C++ 컴파일러는 그 멤버 함수를 인라인으로 호출하려 할 것이다.
SetField 같은 경우에는 클래스 외부에서 정의된 멤버 함수 이므로 inline 키워드를 명시적으로 붙여 줘야 inline으로 호출을 하도록 요청 할 수 있다.
참고로, inline 으로 명시한다고 해서 항상 inline 으로 호출된다는 보장을 하지 않는다.

private 데이터 멤버에 참조반환

Class A
{
public:
int &badSetHour(int );
private:
int hour;
}

int &Time::badSetHour( int h )
{
.....
return hour;
}

main()
{
     int& a = time.GetHour();
     a = 10;
}


위와 같이, private 변수를 참조반환을 하는 경우, hour 의 값을 반환하는 것이 아니라 hour 변수 자체 반환하는 것 처럼 되기 때문에, 외부에서 참조반환을 사용하여 private 변수를 직접 접근가능하게 되서, 객체지향에 위배되게 된다. 따라서 참조반환은 사용하지 않도록 하자.
위의 경우, a에서 10을 넣게 되면, time 객체의 private 변수인 hour 에 10이 들어가게 된다. 

설정

트랙백

댓글