728x90
반응형

프로그래밍 지식 63

C++문법/ 타입캐스팅, 캐스트 연산자

일반적으로 C에서는 형변환을 할 때 앞에 (바꾸려는 자료형) 원래 변수 이렇게 했지만 이렇게 바꾸는 것은 C언어 스타일의 문법이다. 아무조건 없이 해당 변수를 그냥 변경하는 것이다. 변경할 수 없을 때에도 변경을 시도하니 문제가 생기기 일쑤다. 이러한 형변환은 우리가 무조건 형변환이 된다는 것을 알고 있을 때나 가능하다. 그래서 C++에서는 4가지 형변환 연산자를 제공해준다. static_cast() //1 dynamic_cast() //2 const_cast() //3 reinterpret_cast() //4 1번은 가장 기본적인 캐스트 연산 방법이다. 2.번은 객체지향 언어의 다형성을 이용하여 모호한 타입 캐스팅 오류를 막아준다. 3번은 자료형이 가지고 있는 상수 속성을 제거한다. 4번은 어떠한 포인..

C++문법/ 오버로딩, Overloading

오버로드는 스타크래프트가 아니라 철자가 다르다. Lord - Load 아무튼 객체지향언어의 특징인 다형성을 위해 오버로딩이 나왔다. 알아보자 함수 오버로딩이란 하나의 함수가 여러가지 형태를 가지는 것이다. 여기서 여러가지 형태란 하는 일은 같지만 사용하는 매개변수가 다를 때를 말한다. 예를 들어 눈이 온다. 눈이 아프다. 에서 눈이 모양은 같지만 다른 의미로 사용되는 것과 비슷하다. 다시 말하자면 함수 오버로딩은 매개변수에 따라 달라진다. 만약에 두 함수가 같은 개수, 같은 데이터형의 매개 변수를 가지고, 매개변수의 순서까지 동일하다면 두 함수의 시그니처는 같다고 한다. ++ 이 때는 매개변수의 이름은 달라도 상관없다. (int x든 int y든 변수의 이름은 중요치 않다) C++에서는 서로 다른 시그니..

C++문법/ 함수 매개변수에서 * 과 &의 차이 ★★★★★

짧게 설명하겠다. 주석에 달아놓았다. 내가 써놓은 참조 변수에 대해 보고 가면 더 좋다. [프로그래밍언어(Programming Language)/C || C++] - C++문법/ 참조 변수, reference + 참조의 특성 #include using namespace std; int func(int* ptr); // -> 포인터를 매개변수로 받음 int func(int& a); // -> 변수를 매개변수로 받지만 결국 해당 변수의 참조임 int main() { int x = 3; int* px = &x; cout

C 문법/ 소스파일부터 실행파일까지, From source To exe

우리가 쓴 코드가 어떻게 실행되는 것일까? 컴파일러의 역할은 무엇일까? 중간 중간 산출물은 도대체 뭘 위해 필요한 것일까? 알아보자 소스파일, Source File (원시 코드라고도 한다) -> 프로그래밍 언어로 작성된 문서 (Text Editor로 쓰인 모든 문서) -파일형식( filename.c 또는 .cpp) Source File은 우리가 이해하기 쉬운 언어(프로그래밍 언어)로 쓴 것으로 Compiler를 이용해 어셈블리어라는 기계어 전 단계의 언어로 바꾼다. ** 누구는 컴파일러 자체가 기계어로 바꾼다하는데(사실이 아니다) 그렇게 Interface가 적어지면 범용성이 떨어진다. 중간에 Assembly 라는 Interface를 달아서 이식성과 범용성을 높인다. ++그러나 대부분의 컴파일러가 어셈블러..

C++문법/ 디폴트 매개변수, Default Parameter

C에서 C++에 새로 추가된 기능인 디폴트 매개변수에 대해서 알아보자 디폴트 매개변수는 이름에서도 알 수 있듯이 함수 호출에서 실제 매개변수를 생략했을 경우 실제 매개변수 대신 사용되는 값이다. **(함수에서 매개변수를 가끔씩 빼먹어도 작동하는 이유다.) 예를 들어, void wow(int n)에서 n이 1로 내정되도록 디폴트 값을 지정했다치자. 그렇게 되면 실제 매개변수를 생략한 채로 wow( )를 호출하면 wow(1)과 같은 수행을 한다. 디폴트 매개변수는 정말 큰 융통성을 가져다 주는데 문자열과 n을 매개변수로 사용하여 그 문자열 앞에서부터 n 개 문자를 취하여 반환하는 left()라는 함수가 있다고 하자. ** substr(0, n)이 위에 것 아니냐? 라고 하면 공부 정말 많이한 사람이다. 좀 ..

C++문법/ 참조 변수, reference + 참조의 특성

C++에서는 참조 변수라는 새로운 복합 타입을 언어에 추가했다. 여기서 참조는 미리 정의된 어떤 변수의 실제 이름 대신 쓸 수 있는 대용 이름을 말한다. 예를 들어 ace 를 trees 변수의 참조로 만들면 ace와 trees는 같은 변수를 나타내는 것으로 사용할 수 있다. 그런데 생각해보면 굳이 다른 이름을 만들어야 하는가? 라는 의문이 든다. 참조를 하는 주된 이유는 바로 함수의 형식 매개변수에 사용하기 위함이다. -> 해당 변수의 주소를 직접 가리키는 다른 이름의 변수 == 참조 변수 참조를 매개변수로 사용하면 그 함수는 복사본이 아니라 원본 데이터를 가지고 작업한다. 이는 복사본을 만들기 위한 오버헤드가 사라지는 효과도 있다. 그래서 참조는 클래스를 설계할 때 필수적으로 사용된다. 우선 참조가 어..

C++문법/ 인라인 함수, inline

인라인 함수는 프로그램의 실행 속도를 높이기 위해 C++에 새로 보강된 것이다. (C에서는 매크로 기능을 위해 #define을 쓰고는 했다.) 일반 함수와 인라인 함수의 가장 큰 차이는 프로그래머가 코드를 어떻게 작성하느냐에 있는 것이 아니다. C++ 컴파일러가 코드를 프로그램에 어떻게 결합하느냐에 있다. ++ 인라인 함수와 일반 함수의 차이를 이해하려면 프로그램의 내부 구조를 깊이 있게 살펴볼 필요가 있다. (컴퓨터 구조 수업을 들으면 쉽다) 컴파일 작업의 최종 산출물은 기계어 명령으로 이루어진 실행 프로그램이다. (High-level -> Assembly -> Machinary) 프로그램을 실행하면, 운영체제는 이 명령들을 컴퓨터의 메모리에 로드한다. 로드된 명령들은 각각 하나의 특정 메모리 주소를 ..

C++문법/ 가상, Virtual (+ Override)

Virtual이라는 키워드가 C++에 존재한다. 무슨 용도로 쓰일까?? 알아보자 참고로 여기서 가상이라는 것은 실존하지 않는다는 뜻이 절대 아니다. 우선 답부터 말해주자면 동적 바인딩, Dynamic Binding을 위해서 쓰인다. 즉, 컴파일 시에 어떤 함수가 실행될 지 정해지지 않고 런타임 시에 정해지는 것이다. 여기서 동적 바인딩이란 컴파일 시에 정적 타입으로 참조할 주소가 정해지는 것과 달리 객체를 체크해서 참조할 주소를 정하는 것이라 생각하면 된다. 우선 머리에만 넣었다가 이따가 다시 예로 알아보도록 하자. 우선 업캐스팅을 알아보자 (다운 캐스팅도 있지만 생략) 업캐스팅이란 부모 클래스의 타입으로 자식객체를 선언하는 것 다운 캐스팅이란 자식 클래스 타입으로 부모객체를 선언하는 것 질문을 해보겠다..

C++문법/ 생성자와 소멸자 , Constructor & Destructor

생성자란 객체가 생성되면 자동으로 호출되는 것으로 생성자가 정의되어 있다면 해당 생성자가 호출된다. **생성자를 호출해도 생성자는 Return이 없다. 그냥 값 초기화를 위해 쓰기 때문이다. **생성자는 리턴값이 없더라고 void형으로 선언하지 않는다. -> 생성자에는 데이터형을 선언하지 않는다. // 객체를 초기화 하는 역할을 하기 때문에 리턴값이 없다! /* 클래스 이름 */ (/* 인자 */int x, int y ...) { x_ = x; y_ = y; .... .... } **// 언더바 _는 멤버 변수에 붙여서 구분한다. -> 멤버라는 뜻에 m_x 라고도 쓴다. 어..? 근데 나는 그냥 객체에 인자를 넣어서 초기화를 안해도 되던데?? Car c = new Car(); //?? 이래도 오류 안나던..

C++문법 / 문자열 함수를 위한 cctype

코딩테스트에서 유용한 헤더라고 할 수 있다. #include // 문자 관련 함수들의 원형 이 헤더에 문자열에 엄청 유용한 함수들이 들어있다. int isalnum(); //알파벳이나 숫자이면 true int isalpha(); //알파벳이면 int isblank(); // 공백이나 tab이면 int iscntrl(); // 제어문자이면 int isdigit(); // 십진 숫자이면 int isgraph(); // 빈칸이 아닌 인쇄할 수 있는 문자면 int islower(); // 소문자이면 int isprint(); // 빈칸을 포함한 인쇄할 수 있는 문자면 int ispunct(); // 구두점 문자이면 int isspace(); // 빈칸이면 int isupper(); // 대문자면 int isxd..

728x90
반응형