삼항 연산자 삼항 연산자(ternary operator) 삼항 연산자는 다른 언어에는 존재하지 않는 C언어와 C++만의 독특한 연산자이다. C++에서 유일하게 피연산자를 세 개나 가지는 조건 연산자이다. 간단하게 if-else문을 대체할 수 있다. 문법 조건식 ? 반환값1 : 반환값2 물음표(?) 앞의 조건식에 따라 결괏값이 참(true)이면 반환값 1을 반환하고, 결괏값이 거짓(false)이면 반환값2를 반환합니다. 언어/C++ 2024.02.14
Vector Container Vector Container 자동으로 메모리가 할당되는 배열 Vector의 초기화 vector 변수명 벡터 생성 vector 변수명(숫자) 숫자만큼 벡터 생성 후 0으로 초기화 vector 변수명 = { 변수1, 변수2, ..} 벡터 생성 후 오른쪽 변수 값으로 초기화 vector 변수명[] = {,} 벡터 배열(2차원 벡터) 선언 및 초기화(열 고정, 행가변 vector 변수명 2차원 벡터 생성(열과 행 모두 가변) vector변수명.assign(범위, 초기화할 값) 벡터의 범위 내에서 해당 값으로 초기화 Vector의 Iterators v.begin() 벡터 시작점의 주소 값 반환 v.end() 벡터 (끝부분 + 1) 주소값 반환 Vector Element Access(벡터의 요소 접근) v.at(.. 언어/C++ 2024.02.14
C & C++.1 C & C++ 선언(declaration)과 정의(definition) 프로그래밍에서 선언(declaration)과 정의(definition)는 명백히 다른 역할을 하지만 혼동하여 사용하기 쉽다. 선언과 정의의 가장 큰 차이는 ‘메모리를 할당하는가’ 이다. 메모리를 할당하지 않고, 대상의 이름만 알려준다면 선언이고 대상의 메모리가 할당된다면 그것은 정의다. 선언 컴파일러가 참조할 식별자(identifier)와 이름을 알립니다. 식별자란 변수의 타입과 함수의 인수목록을 뜻하며 이름은 변수, 함수, 클래스의 이름, 네임 스페이스를 뜻합니다. 정의 정의는 식별자와 이름으로부터 코드를 생성하여, 함수가 호출되거나 변수를 사용할 때 생성된 코드를 참조한다. 정의는 고유 사양으로 프로그램에는 정의가 하나만 있어야 .. 언어/C++ 2024.02.07
1. Introduction to the C++ 다시 열심히 블로그에 적어봅시다. 1. C++ 란 무엇인가 C++는 Bjarne Stroustrup이 C 프로그래밍 언어의 확장으로 만든 범용 프로그래밍 언어이다. 1985년 처음 소개됐으며, 클래스 및 상속과 같은 객체 지향 기능을 제공한다. C++는 게임 개발, 시스템 프로그래밍, 임베디드 시스템, 고성능 컴퓨팅 등 다양한 애플리케이션에 널리 사용된다. C++는 정적 타입 언어이다. 즉, 변수 유형은 컴파일 중 결정되며, 다양한 작업을 위한 풍부한 함수, 알고리즘 및 데이터 구조 세트를 제공하는 C++ 표준 라이브러리 라는 광범위한 라이브러리가 있다. 정적 타입 언어 - 작성자가 소스 코드를 보고 변수 타입을 직접 작성하는 언어 변수에 들어갈 값의 형태에 따라 자료형을 지정해주어야한다. 컴파일시 맞지.. 언어/C++ 2023.10.02
9. 연산자 오버로딩 함수가 오버로딩 되면, 오버로딩 된 수만큼 다양한 기능을 제공한다 - 이름은 하나지만 기능은 여러가지 연산자 또한 가능하다 ‘operator’ 키워드와 ‘연산자’를 묶어서 함수의 이름을 정의하면, 함수의 이름을 이용한 함수의 호출뿐만 아니라, 연산자를 이용한 함수의 호출도 허용 연산자를 오버로딩 하는 두 가지 방법 멤버함수에 의한 연산자 오버로딩 전역함수에 의한 연산자 오버로딩 동일한 자료형을 대상으로 +연산자를 전역함수 기반으로, 그리고 멤버함수 기반으로 동시에 오버로딩 할 경우, 멤버함수 기반으로 오버로딩 된 함수가 전역함수 기반으로 오버로딩 된 함수보다 우선시 되어 호출 오버로딩이 불가능한 연산자의 종류 . - 멤버 접근연산자 .* - 멤버 포인터 연산자 :: - 범위 지정 연산자 ?: - 조건 연.. 언어/C++ 2023.02.02
가상(Virtual)의 원리와 다중상속 가상(Virtual) 객체가 생성되면 멤버변수는 객체 내에 존재하지만, 멤버함수는 메모리의 한 공간에 별도로 위치하고선, 이 함수가 정의된 클래스의 모든 객체가 이를 공유하는 형태를 취한다. 오버라이딩 된 가상함수의 주소정보는 유도 클래스의 가상함수 테이블에 포함되지 않는다. 가상함수 테이블에 의한속도의 저하 클래스에 가상함수 포함되면, 가상함수 테이블이 생성되고, 또 이 테이블을 참조하여 호출될 함수가 결정되기 때문에 실행속도가 감소한다. 하지만 그 속도의 차이가 극히 미미하다 다중상속(Multiple Inheritance) 둘 이상의 클래스를 동시에 상속하는 것 논란이 많은 문법 득보다는 실이 더 많다 기본문법에서 제외되어야한다. 일반적인 경우 다양한 문제를 동반하지만 제한적인 사용까지 부정할 필요는.. 언어/C++ 2023.01.31
8. 상속과 다형성 객체 포인터 변수 : 객체의 주소 값을 저장하는 포인터 변수 클래스 포인터는 포인터 객체뿐만 아니라, 클래스를 상속하는 유도 클래스의 객체도 가리킬 수 있다 C++에서, AAA형 포인터 변수는 AAA 객체 또는 AAA를 직접 혹은 간접적으로 상속하는 모든 객체를 가리킬 수 있다.(객체의 주소 값을 저장할 수 있다.) 함수 오버라이딩(Function Overriding) - 함수 재정의 오버라이딩이 된 기초 클래스의 함수는, 오버라이딩을 한 유도 클래스의 함수에 가려진다. C++ 컴파일러는 포인터 연산의 가능성 여부를 판단 할 때, 포인터의 자료형을 기준으로 판단하지, 실제 가리키는 객체의 자료형을 기준으로 판단하지 않는다. 포인터 형에 해당하는 클래스에 정의된 멤버에만 접근이 가능하다. 가상함수의 선언은.. 언어/C++ 2023.01.26
7. 상속(Inheritance)의 이해 기능의 처리를 실제로 담당하는 클래스 - ‘컨트롤(Control) 클래스’ 또는 ‘핸들러(Handler) 클래스’ A 클래스가 B 클래스를 상속하게 되면, A 클래스는 B 클래스가 지니고 있는 모든 멤버를 물려받는다. 즉, A 객체는 A 클래스에 선언된 멤버 외 B 클래스에 선언 된 멤버도 존재하게 된다. A 클래스 상위 클래스 기초(Base) 클래스 슈퍼(Super) 클래스 부모 클래스 B클래스 하위 클래스 유도(Derived) 클래스 서브 클래스 자식 클래스 기초와 유도라는 말을 자주 사용한다. 유도 클래스의 객체생성 과정에서 기초 클래스의 생성자는 100% 호출된다 유도 클래스의 생성자에서 기초 클래스의 생성자 호출을 명시하지 않으면, 기초 클래스의 void 생성자가 호출된다. 클래스 멤버는 해당 .. 언어/C++ 2023.01.26
6. 클래스의 완성 정보은닉(Information Hiding) 프로그래머가 실수를 했을 때, 이는 어떻게든 발견되어야 한다. 제한된 방법으로의 접근만 허용해서 잘못된 값이 저장되지 않도록 도와야 하고, 또 실수를 했을 때, 실수가 쉽게 발견되도록 해야 한다. 멤버변수를 private로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의해서 ,안전한 형태로 멤버 변수의 접근을 유도하는 것이 바로 ‘정보은닉’ const 함수 이 함수 내에서는 멤버변수에 저장된 값을 변경하지 않겠다 const 선언이 추가된 멤버함수 내에서 멤버변수의 값을 변경하는 코드가 삽입되면, 컴파일 에러가 발생한다. const 함수 내에서는 const가 아닌 함수의 호출이 제한된다. 캡슐화(Encapsulation) 하나의 목적 하에 둘 이상의 기능이 .. 언어/C++ 2023.01.19
5. 연산자 다중정의 연산자 함수 연산자를 이용하듯 호출할 수 있는 메서드 산술 연산자 operator int () - 형 변환 연산자 a operator +(const a &b) - 덧셈 연산자 a& operator=(const a &b) - 단순 대입 연산자 대입 연산자 = 복합 대입 연산자 += 배열 연산자 [] 관계 연산자 ==, ≠ 보통 strcmp 로 구현 단항 증감 연산자 ++, -- 전위 연산자 ++a - 바로 return 증가한 뒤 그 값을 리턴 후위 연산자 a++ - 값을 증가시키기전 백업 후 증가. 백업 값을 리턴 언어/C++ 2023.01.17