728x90

c++ 100

24.11.29 C++

C++복사 생성자복사 생성자는 호출되는 시점이 다른 일반 생서어자와 차이가 있기 때문에 이름이 붙었다.멤버 대 멤버의 복사에 사용되는 원본을 변경시키는 것은 복사의 개념을 무너뜨리는 행위가 되니, 키워드 const를 삽입해서 이러한 실수를 막아 놓는 것이 좋다.복사 생성자를 정의하지 않으면, 멤버 대 멤버의 복사를 진행하는 디폴트 복사 생성자가 자동으로 삽입된다.디폴트 복사 생성자를 막기 위해서는 복사 생성자의 묵시적 호출을 허용하지 않으면 된다. 이러한 목적으로 explicit이 사용된다. explicit을 사용하면 묵시적 변환이 발생하지 않아서 대입 연산자를 이용한 객체의 생성 및 초기화가 불가능해진다.전달인자가 하나인 생성자가 있다면, 이 역시 묵시적 변환이 발생한다.복사 생성자의 매개변수는 참조형..

클래스(Class)

클래스(Class)키워드 struct를 대신해서 class를 사용하면, 구조체가 아닌 클래스가 된다.클래스는 기본적으로(별도의 선언을 하지 않으면) 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능하다.클래스는 정의를 하는 과정에서 각각의 변수 및 함수의 접근 허용범위를 별도로 선언해야 한다. 이것이 struct를 이용해서 정의하는 구조체와 class를 이용해서 정의하는 클래스의 차이점이다.접근제어 지시자(접근제어 레이블)C++의 접근제어 지시자는 다음과 같이 총 세가지가 존재한다.public : 어디서든 접근허용protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근 허용private : 클래스 내(클래스 내에 정의된 함수)에서만 접근허용접근제어 지시자가 선언되면, 그 ..

언어/C++ 2024.11.26

24.11.26 C++, 책

C++클래스(Class)키워드 struct를 대신해서 class를 사용하면, 구조체가 아닌 클래스가 된다.클래스는 기본적으로(별도의 선언을 하지 않으면) 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근이 가능하다.클래스는 정의를 하는 과정에서 각각의 변수 및 함수의 접근 허용범위를 별도로 선언해야 한다. 이것이 struct를 이용해서 정의하는 구조체와 class를 이용해서 정의하는 클래스의 차이점이다.접근제어 지시자(접근제어 레이블)C++의 접근제어 지시자는 다음과 같이 총 세가지가 존재한다.public : 어디서든 접근허용protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근 허용private : 클래스 내(클래스 내에 정의된 함수)에서만 접근허용접근제어 지시자가 선언되면,..

24.11.25 CS, C++

책이것이 컴퓨터 과학이다.Chapter 2. 운영체제운영체제의 핵심 기능을 담당하는 부분을 커널(kernel)이라고 한다.운영체제에는 크게 2가지의 핵심 기능이 있다.자원 할당 및 관리프로세스 및 스레드 관리운영체제의 역할자원(resource)이란 프로그램 실행에 마땅히 필요한 요소를 의미한다. 실행에 필요한 데이터를 자원이라고 하기도 하고, 실행에 필요한 부품을 자원이라고 하기도 한다.운영체제는 사용자가 실행하는 응용 프로그램을 대신하여 CPU, 메모리, 보조기억장치 등의 컴퓨터 부품에 접근하고, 각각의 부품들이 효율적으로 사용되도록 관리한다.응용 프로그램이 컴퓨터 부품들을 효율적으로 할당받아 문제 없이 실행할 수 있도록 응용 프로그램에게 자원을 할당한다.프로세스와 스레드프로세스의 유형으로는 사용자가 ..

구조체(Struct)

구조체(Struct)구조체는 연관 있는 데이터를 묶을 수 있는 문법적 장치로 데이터의 표현에 매우 큰 도움을 준다.키워드 struct는 이어서 선언되는 자료형이 구조체를 기반으로 정의된 자료형임을 나타낸다. 그리고 키워드 struct를 생략하려면 별도의 typedef 선언을 추가해야 한다. 하지만 C++에서는 기본 자료형 변수의 선언방식이나 구조체를 기반으로 정의된 자료형의 변수 선언방식에 차이가 없다. 즉 C++에서는 별도의 typedef 선언 없이도 다음과 같이 변수를 선언할 수 있다.C++에서 구조체는 클래스의 일종으로 간주된다.구조체 함수구조체 안에 함수가 정의되어 있으면 함수를 인라인으로 처리하라는 의미가 더불어 내포된다.반면 함수를 구조체 밖으로 빼내면(함수 자체는 내부, 구현을 외부), 이러..

언어/C++ 2024.11.24

참조자(Reference)

참조자(Reference)이미 선언된 변수의 앞에 & 연산자가 오면 주소 값의 반환을 명령하는 뜻이 되지만, 새로 선언되는 변수의 이름 앞에 등장하면, 이는 참조자의 선언을 뜻하는 게 된다.참조자는 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름이다.함수 내에서 선언된 지역적(local) 참조자는 지역변수와 마찬가지로 함수를 빠져나가면 소멸이 된다.참조자 수에는 제한이 없다. 한 개의 변수에 여러 개의 참조자를 선언하는 것도 가능하다.참조자의 선언 가능 범위참조는 변수에 대해서만 선언이 가능하고, 선언됨과 동시에 누군가를 참조해야 한다.상수를 대상으로 참조자를 선언할 수는 없고, 미리 참조자를 선언했다가, 후에 누군가를 참조하는 것은 불가능하며, 참조의 대상을 바꾸는 것도 불가능하다.참조자가 상수..

언어/C++ 2024.11.24

인라인(inline) 함수

인라인(inline) 함수함수 호출의 오버헤드를 줄이기 위해, 컴파일러가 함수 호출을 실제 함수 코드로 대체하도록 제안하는 함수이다.C++에서 inline 키워드를 사용하여 선언한다.인라인 함수는 컴파일 시점에 처리되며, 함수 호출 대신 함수의 본문을 호출 지점에 복사하여 성능을 최적화하려는 목적으로 사용된다. 따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우, 이 키워드를 무시해버리기도 한다. 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.특징함수 호출 오버헤드 제거일반적으로 함수 호출 시, 프로그램은 스택에 매개변수와 반환 주소를 저장하고 복귀하는 오버헤드가 발생한다.인라인 함수는 이러한 과정 없이, 함수의 코드를 호출 지점에 직접 삽입한다.컴파일러의..

언어/C++ 2024.11.24

24.11.24 C++

C++인라인(inline) 함수함수 호출의 오버헤드를 줄이기 위해, 컴파일러가 함수 호출을 실제 함수 코드로 대체하도록 제안하는 함수이다. C++에서 inline 키워드를 사용하여 선언한다.인라인 함수는 컴파일 시점에 처리되며, 함수 호출 대신 함수의 본문을 호출 지점에 복사하여 성능을 최적화하려는 목적으로 사용된다. 따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우, 이 키워드를 무시해버리기도 한다. 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.특징함수 호출 오버헤드 제거일반적으로 함수 호출 시, 프로그램은 스택에 매개변수와 반환 주소를 저장하고 복귀하는 오버헤드가 발생한다.인라인 함수는 이러한 과정 없이, 함수의 코드를 호출 지점에 직접 삽입한다.컴..

24.11.23 C++

C++Call by Value함수 호출 시 인자의 값 자체를 복사하여 함수에 전달하는 방식이다.함수는 원본 데이터의 복사본을 사용하므로, 함수 내부에서 데이터가 변경되더라도 원본 데이터에는 영향을 미치지 않는다.Call by Reference함수 호출 시 인자의 참조를 전달하는 방식이다.함수는 원본 데이터의 주소를 참조하므로, 함수 내부에서 변경된 내용이 원본 데이터에 반영된다.언제 Call by Value 와 Call by Reference를 사용해야 할까?Call by Value원본 데이터 보호가 중요한 경우 사용한다. 함수 내부에서 인자를 수정하더라도 원본 데이터에 영향을 주기 않아야 할 때 적합하다.데이터의 읽기 전용 연산이나 원본 데이터 변경을 원하지 않는 경우 사용된다.Call by Refer..

추상 클래스/인터페이스

추상 클래스/인터페이스추상 클래스(Abstract Class)추상 클래스는 공통적인 속성과 행동을 정의하는 클래스로, 하위 클래스에서 구현을 강제하고자 하는 추상 메서드를 포함할 수 있다. 추상 클래스는 인스턴스화할 수 없으며, 주로 기반 클래스(base class)로 사용된다.특징추상 클래스는 일반적인 멤버 변수와 구현된 메서드를 포함할 수 있으며, 동시에 순수 가상 함수(C++) 또는 추상 메서드(c#)도 가질 수 있다.상속을 통해 다른 클래스에서 공통 기능을 재사용하면서 특정 메서드의 구현을 강제할 수 있다.추상 클래스 자체로는 인스턴스화 할 수 없고, 반드시 상속받아 구현해야 한다.인터페이스(Interface)클래스가 구현해야 할 메서드의 계약(Contract)을 정의하는 일종의 청사진이다. 인터..

언어/C++ 2024.11.22
728x90