[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

설정

트랙백

댓글