일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hardwareacceleration
- C
- null safety
- Glide
- Gradle
- Realm
- error
- test
- dataginding
- bigquery
- web3js
- vuepress
- log
- ethereum
- convert
- coroutines
- 안드로이드
- 스트리밍
- fabic
- LAYER_TYPE_SOFTWARE
- Android
- firebase
- quick-start
- Exception
- 컴파일
- kotlin
- fabric-sdk-java
- 다윈
- porterduff
- Hyperledger
- Today
- Total
목록프로그래밍/C / C++ (41)
날마다 새롭게 또 날마다 새롭게
문자나 기호들을 컴퓨터에서 저장하거나 통신할 목적으로 부호화하는 방법을 말한다.문자 인코딩은 크게 ASCII, Unicode가 있다. - ASCII 코드- 영문/숫자 : 1바이트- 한글/한자 : 2바이트- euc-kr : 한국어 ASCII 코드- Unicode- 모든 글자 : 2바이트- UTF-8 : 8bit로 표현 → 영문/숫자 : 1바이트, 한글/한자 : 3바이트
1. 연산 우선 순위의 연산 순서 연산자 연산순서 ( ) [ ] -> . 좌에서 우 ! ~ ++ -- + - * & (type) sizeof 우에서 좌 * / % 좌에서 우 + - 좌에서 우 > 좌에서 우 = 좌에서 우 == != 좌에서 우 & 좌에서 우 ^ 좌에서 우 | 좌에서 우 && 좌에서 우 || 좌에서 우 ?: 우에서 좌 = += -= *= /= %= &= ^= ||= = 우에서 좌 , 좌에서 우 2. 비트 연산자 종류& 비트 방식 AND | 비트 방식 inclusive OR ^ 비트 방식 exclusive OR right shift ~ 1의 보수 ※ 진수 별 정수값 표기방법8진수 : 0을 앞에 쓴다. ex) 03716진수 : 0x를 앞에 쓴다. ex) 0x1f
1. 라이브러리로 만들 헤더파일과 소스파일을 만든다.power.hint power(int m, int n);power.c#include "power.h"int power(int base, int n){ int i,p; p=1; for(i=1;i
간단한 문자 입력-출력 코드이다.작성은 어렵지 않았지만 EOF에 해당하는 입력이 무엇인지 몰라...코드 실행을 종료할 수 없었다.리눅스 shell에서 EOF에 해당하는 입력은 Ctrl +D 이고, (해본 것..)일반적으로 Ctrl + Z가 EOF이다. ※ getchar는 Enter 키가 입력될 때까지 입력을 받는다. #include "stdio.h" /* copy input to output; 1st version */ int main(){ int c; printf("-1은 어떤 문자? %c\n",-1); putchar(-1); c=getchar(); while((c=getchar()) !=EOF) { putchar(c); } return 0; }
객체 간 대입연산 시 대입 연산자를 정의하지 않으면 디폴트 대입 연산자가 삽입된다. 디폴트 대입 연산자는 멤버 대 멤버의 복사가 얕은 복사로 진행 된다. 그렇기 때문에 연산자를 동적 할당하고 있는 객체를 디폴트 대입 연산자로 연산하게 되면 메모리 누수와 메모리 중복 해제하는 문제가 발생한다. 그러므로 문제가 발생하지 않도록 직접 대입 연산자를 정의하도록 한다. 연산자를 동적 할당하는 경우 대입 연산자를 다음과 같은 형태로 정의한다.■ 깊은 복사를 진행하도록 정의한다.■ 메모리 누수가 발생하지 않도록, 깊은 복사에 앞서 메모리 해제의 과정을 거친다. ※ 상속 구조에서의 대입 연산자 호출 유도 클래스의 생성자에는 아무런 명시를 하지 않아도 기초 클래스의 생성자가 호출되지만 유도 클래스의 대입 연산자에는 아무..
클래스 중에서 객체 생성을 목적으로 하지 않는 클래스도 존재한다. 이러한 클래스는 객체가 생성되지 않도록 하기 위해서 '순수 가상함수'를 선언한다. '순수 가상함수'는 함수의 몸체가 정의되지 않은 함수로 명시적으로 몸체를 정의하지 않았다고 컴파일러에게 알려주는 역할을 한다. '순수 가상함수' 선언이 되어 있는 클래스를 생성하려고 하면 컴파일 에러가 발생한다. 이렇게 '순수 가상함수'를 선언하여 객체 생성이 불가능한 클래스를 추상 클래스라고 한다.
부모 클래스의 포인터는 자식 클래스를 가리킬 수 있으나 자식 클래스의 멤버에는 접근하지 못한다. 다음과 같이 부모 클래스 포인터가 자식 클래스를 가리키고 있을 때를 살펴보자.먼저 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 멤버변수만 호출 가능하다. 그 이유는 초기화를 따로 해줘야하는 이유와 같다. 클래스의 생성과 상관없이 생성되기 때문이다.