본문 바로가기

전체 글

(484)
Lvalue / Rvalue Lvalue에는 변수만 가능 Rvalue에는 변수 및 상수 모두 가능. Lv = Rv 1. type 2. 차원 이 동일해야함. 일반상수는 무조건 0차원 주소상수는 최소 1차원 이상 차원조절 연산자 * [] & (type) -> int main(int argc, char* argv[]) { char ch3[2]; ch3="a"; return 0; } 에러. ch3는 배열의 주소값. 배열의 주소값은 "주소상수"임 Lvalue 에는 상수가 안 됨.
부동소수점 1 #include 2 int main(void) 3 { 4 printf("%x : %x \n", 1.0); 5 printf("%x : %x \n",0.0); 6 printf("%d \n",3.0); 7 } 결과 값 : 0:3ff00000 0:0 0 3 -> 2진수 : 11.0(2) 정규화 : 1.1 *2^1 프린트 버퍼의 특성상 float도 프린터버퍼로 들어가면 double로 변환되서 들어감.(실수) char(1바이트)를 넣을 때는 4바이트로(int)로 캐스팅되서 들어감. 프린트 버퍼는 4바이트씩 읽어감. #include 시스템 표준 헤더파일 #include "plming.h" 사용자 헤더파일. 현재 위치 기준
IEEE745
복사 생성자 클래스에서 정의하지 않아도 자동으로 생성되는 것은 기본생성자와 기본 소멸자가 있고, 또한 복사 생성자도 자동 생성된다. 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로 해주면, 데이터조작을 막을 수 있다.
포인터 # 포인터 주소값 출력시 %u # 포인터 연산 관련 void main() { int m[4] = {9,8,7,6}; // int의 사이즈는 4 double *pm; // double 사이즈는 8 pm = (double*)&m; printf("%d %d %d %d\n",m[0],m[1],m[2],m[3]); printf("%u %u %u %u\n",&m[0],&m[1],&m[2],&m[3]); printf("%d %d %d %d\n",*pm,*(pm+1),*(pm+2),*(pm+3)); printf("%u %u %u %u\n", pm,pm+1,pm+2,pm+3); } 결과값 9 8 7 6 1245012 1245016 1245020 1245024 // 4씩 증가함 9 8 7 6 1245012 1245020 ..