일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Glide
- convert
- vuepress
- bigquery
- firebase
- LAYER_TYPE_SOFTWARE
- error
- kotlin
- Hyperledger
- Exception
- dataginding
- quick-start
- 다윈
- web3js
- coroutines
- 스트리밍
- 안드로이드
- porterduff
- hardwareacceleration
- ethereum
- Android
- null safety
- test
- log
- Realm
- fabic
- 컴파일
- C
- Gradle
- fabric-sdk-java
- Today
- Total
목록프로그래밍 (155)
날마다 새롭게 또 날마다 새롭게
부모 클래스의 포인터는 자식 클래스를 가리킬 수 있으나 자식 클래스의 멤버에는 접근하지 못한다. 다음과 같이 부모 클래스 포인터가 자식 클래스를 가리키고 있을 때를 살펴보자.먼저 First MyFunc;tptr->MyFunc; 결과가 어떻게 되겠는가? 부모 클래스는 자식 클래스를 가리킬 수는 있으나 자식 클래스 멤버를 사용하지는 못하므로, C++ 컴파일러는 실제 가리키는 객체의 자료형을 기준으로 하지 않고 포인터의 자료형을 기준으로 하여 함수를 호출하게 된다. 그러므로 결과는 다음과 같다.FirstFuncSecondFuncThirdFunc 그렇다면 포인터의 자료형이 아닌 실제 가리키는 객체의 자료형을 기준으로 함수 호출은 어떻게 할 수 있는가? 바로 가상함수(Virtual Function)을 이용하면 포..
함수 오버로딩전달 인자가 다르고 동일한 이름의 함수 정의를 함수 오버로딩이라고 한다.int MyFunc(int num)int MyFunc(int a, int b)함수 호출 시, 전달되는 인자에 따라 함수를 구분할 수 있다. 함수 오버라이딩부모 클래스와 유도 클래스에 동일한 이름의 함수 정의를 함수 오버라이딩이라고 한다.int Paren::GetPay() const;int Derived::GetPay() const;함수가 오버라이딩 되면, 오버라이딩 된 부모 클래스의 함수는 유도 클래스의 함수에 가려진다.
상속은 부모님으로부터 어떤 대상을 물려받는 것을 말한다. 클래스 상속도 원래 상속이 갖고 있는 의미와 마찬가지로 부모 클래스가 가지고 있는 것을 자식 클래스에게 물려주는 것을 말한다. 다시 정리하면,A 클래스가 B 클래스를 상속한다.라는 말은 A 클래스는 B 클래스의 모든 멤버를 물려받았다 라는 것을 의미한다. 상속에 대한 정의는 다음과 같이 한다. "class A : public B{ .... }" 주의사항.. A 클래스가 B 클래스를 상속하기 위해서는 B 클래스가 먼저 생성되어 있어야 한다...... 닭이 먼저냐 달걀이 먼저냐..... 그렇다면 이 상속은 왜 필요한가? 상속을 통해서 부모가 가진 특성들을 그대로 갖고 있는 여러 자식 클래스들을 만들어 사용할 수 있다는 장점이 있다. 예를 들어, S 클..
static 멤버변수는 클래수 변수라고도 한다. 그 이유는 클래스당 하나씩만 생성되기 때문이다. 클래스를 생성하건 생성하지 않건, 메모리 공간에 딱 하나만 할당 되어 공유되는 변수이다.주의할 사항static 멤버변수는 클래스가 생성될 때, 동시에 생성되지 않으므로 static 멤버변수의 초기화는 생성자에서 초기화하면 안 된다. static 멤버변수 초기화는 다음과 같이 한다.int SoSimple::simObjCnt=0;static 멤버함수 역시 static 멤버변수와 동일한 특성을 갖는다.단, static 멤버함수 내에서는 static 멤버함수와 static 멤버변수만 호출 가능하다. 그 이유는 초기화를 따로 해줘야하는 이유와 같다. 클래스의 생성과 상관없이 생성되기 때문이다.
C++ 스타일의 초기화 방식은 다음과 같이 두 가지로 볼 수 있다.int num=20; 혹은 int num(20);위의 두 가지 초기화 방식은 결과적으로 동일하다. 객체 초기화 방식도 두 가지로 볼 수 있는데, 먼저 익숙한 대입 연사를 사용한 초기화 방식은 다음과 같다.SoSimple sim1(15,20); SoSimple sim2=sim1;sim2 객체를 새로 생성해서 객체 sim1과 sim2 간의 멤버 대 멤버 복사가 일어난다고 볼 수 있다. 이 명령을 또 다른 초기화 방식을 적용하여 입력하면 다음과 같다.SoSimple sim2(sim1);sim1은 객체 이므로 객체를 인자로 받을 수 있는 생성자 호출이 이루어지고 있는 것을 볼 수 있다. 그렇다면 객체를 인자로 받을 수 있는 생성자는 어떻게 정의되..
이니셜라이저의 역할은 클래스 생성 시, 클래스 내의 멤버변수를 초기화하는 것이다.이니셜라이저는 다음과 같은 형태로 정의한다.class Rectangle{Point upLeft;Point lowRight;public:Rectangle(int x1, int y1,int x2, int y2);}Rectangle::Rectangle(int x1, int y1,int x2, int y2):upLeft(x1,y1),lowRight(x2,y2){}이 중에서 :upLeft(x1,y1),lowRight(x2,y2) 가 이니셜라이저이다.생성자 함수 내에서도 멤버변수를 초기화 할 수 있지만, 클래스 내부의 Point 객체는 아래와 같이 함수 내부에서 초기화할 수 없다.{ upLeft(x1,y1);}하지만 이니셜라이저를 이용..
#ifndef ~ #endif 는 헤더파일의 중복포함을 막기 위해서 사용하는 매크로이다.사용 방법은 다음과 같다.#ifndef __POINT_H_#define __POINT_H_typedef struct __point{ int x; int y;} point;#endif__POINT_H_ 가 정의 되어있지 않으면 __POINT_H_를 정의하고 __point 구조체를 선언한다. 위 헤더파일이 한번이라도 포함이 되면 __POINT_H_는 정의되어 있기 때문에 __point 구조체가 중복 정의 되지않는다.
구조체(클래스)는 서로 다른 타입을 갖는 변수들의 집합이다.구조체의 선언은 다음과 같다.Struct 이름{멤버 목록} 변수명;Struct 이름 변수명;사용자 정의형 타입을 만드는 명령어 typedef 를 사용하여 보다 더 편하게 선언할 수 있다.typedef struct 이름 { 멤버목록} 변수명;이름 변수명;연관있는 서로 다른 타입의 변수들을 하나로 묶어주면 프로그램을 구현하고 관리하는데 용이하다.그렇다면 다음은 연관있는 변수들을 그룹화 하고 이를 처리하는 함수들을 구조체에 포함시켜 보자.C에서는 Struct에 데이터들만 모아놓았지만 C++에서는 다음과 같이 Struct 내 함수 삽입이 가능하다.Struct 이름 {변수들 :char name[100];int age;int height;Struct 내 변..
참조자는 이미 선언된 변수를 대신할 수 있는 또 다른 이름을 말한다.(일종의 별명,, 호 같은 것으로 생각하면 될 것 같다.)예를 들어,,,int num1 = 100;위와 같이 100이라는 값을 갖고 있는 num1 이라는 변수가 있을 때, 우리는 참조자를 이용하여 num1에 또 다른 이름을 부여할 수 있다.num1에 또 다른 이름을 부여하는 명령의 형태는 다음과 같다.int &num2 = num1;위의 명령으로 num1에 num2라는 또 다른 이름을 주었고, 우리는 num1과 num2 두 개의 변수를 사용하여 100이라는 값에 접근할 수 있다. 참조자를 사용하여 다른 함수의 지역변수에 접근이 용이하다. 하지만 데이터를 가져다 쓰는 것만이 아니라 데이터를 변경할 수도 있기 때문에 참조자를 통한 데이터 변경..
메모리는 데이터와 명령어를 저장하는 공간을 말한다.프로그램 실행 시 사용하는 메모리 공간은 Hard Disk, Ram, Cache, Register 4개 영역이 있다. 이 4개의 영역을 운영체제가 단순화하여 하나의 메모리 공간으로 만드는데 이를 가상 메모리 공간이라고 한다.Hard Disk + Ram + Cache + Register = 가상메모리가상 메모리는 역할에 따라서 코드 영역, 데이터 영역, 힙 영역, 스택 영역 이렇게 4개의 공간으로 나뉩니다.코드 영역 : 코드를 저장하는 공간으로 프로그램 실행 시, CPU가 이 곳에서 명령어를 하나씩 가져가서 처리한다.데이터 영역 : 프로그램이 종료될 때까지 지워지지 않는 데이터를 저장하는 공간으로 전역변수, const 상수, static 변수 등이 있다.힙..