본문 바로가기

프로그래밍/C_C++

(9)
Call By [Value, Pointer, Reference] void Call_By_Reference(int &n) { n++; return; } void Call_By_Value(int n) { n++; return; } void Call_By_Pointer(int *n) { (*n)++; return; } int main() { int a=0; Call_By_Value(a); printf("%d\n",a); Call_By_Reference(a); printf("%d\n",a); Call_By_Pointer(&a); printf("%d\n",a); ================================= 0 1 2
복사 생성자 클래스에서 정의하지 않아도 자동으로 생성되는 것은 기본생성자와 기본 소멸자가 있고, 또한 복사 생성자도 자동 생성된다. Point p1; // 기본생성자 호출 모양 Point p2(10,20); // 매개변수 있는 생성자 호출모양 Point p3(p2); // 복사생성자 모양 복사생성자 정의 클래스명(const 클래스명& 객체변수) { 각 멤버 값 복사 } ex) Point (const Point& p) { x = p.x; // Point 클래스 안에 x라는 변수만 있을 경우 } ============================================================================== 함수로 매개변수로 객체를 넘겨줄 때에도 복사생성자가 생성. 함수에서 리턴으로 객체를 넘..
함수포인터 3 함수 포인터를 쓰는 경우가 좋을 때.. ① 선택해야 할 함수가 두 개 이상인 경우, 예를 들어 수십개의 함수중 하나를 호출해야 한다면 함수 포인터 배열을 선언하고 그 첨자를 선택하는 것이 더 쉽다. ② 함수를 선택하는 시점과 실제로 호출하는 시점이 완전히 분리되어 있는 경우도 함수 포인터를 쓰는 것이 유리하다. 호출할 함수에 대한 조건 점검은 필요할 때 한 번만 하고 선택된 함수는 별다른 조건 점검없이 함수 포인터로 바로 호출할 수 있다. ③ 호출할 함수가 DLL같은 외부 모듈에 있고 이 함수를 동적으로 연결할 경우는 컴파일할 때 함수의 존재가 알려지지 않으므로 반드시 함수 포인터를 사용해야 한다. 함수 포인터를 사용하면 이름으로부터 원하는 함수의 번지를 찾아 호출할 수 있다. 함수포인터는 포인터 연산 ..
가상함수 #include using namespace std; class NoVirtualClass { public: int a; int b; int c; int d; void fun1() { cout
구조체 포인터 관련 struct AT{ int age; int grade; }; struct AT A[2]; struct AT *pa; pa = &A; A[0].age = 20; // ( 같은건.. pa->age = 20 ; / *pa.age = 20; ) pa++ // 다음 포인터를 가르킴. **pa.age; // age의 값을 하나 증가 시킴. 확인.. 구조체 포인터 증감 구조체를 call by Value로 주면 그 값을 모두 복사해서 전달하므로, 메모리 소모가 심하지만, call by Reference로 하면 메모리 소모가 적다 데이터 변경을 막기 위해서는 void method(const Plming &p) const로 해주면, 데이터조작을 막을 수 있다.
함수포인터 2 # 함수 포인터의 포인터 함 수 원 형 : int 함수명(int) > int sum(int a) 함 수 포 인 터 : int (*함수포인터명)(int) > int (*pSum)(int a) 함수포인터 의 포인터명 : int (**함수포인터의포인터명)(int) > int (**ppSum)(int a)
배열 배열 정의 : 동일한 자료형으로된 기억 장소들의 모임 기억장소의 일괄처리
함수 포인터 int func(int a) { return a*2; } void main() { int i; int (*pf)(int a); pf=func; i=(*pf)(2); // i =pf(2) ; 도 사용 가능. printf("%d\n",i); }