본문 바로가기

전체 글162

++i vs i++ 누가 일반적인가. ++i와 i++는 둘 다 값을 1씩 증가시키는 역할을 하지만, C++에서 특히 루프에서 ++i가 i++보다 자주 사용되는 이유는 성능과 효율성 때문입니다.1. ++i vs i++의 차이++i: 전위 증가 연산자로, 값을 증가시킨 후 증가된 값을 반환합니다.i++: 후위 증가 연산자로, 현재 값을 반환한 후에 값을 증가시킵니다.두 연산자가 동일한 작업을 수행하지만, i++는 임시 값을 저장하고 반환해야 하므로 추가 작업이 필요합니다.2. 성능 차이C++에서 i가 일반 정수형 변수인 경우, 컴파일러가 최적화를 통해 ++i와 i++ 간의 성능 차이를 줄일 수 있습니다. 하지만 클래스나 사용자 정의 타입의 경우는 이야기가 다릅니다. 후위 증가 연산자(i++)는 증가하기 전의 값을 저장해야 하므로, 추가적인 메모.. 2024. 10. 7.
Optional Type C++의 std::optional 타입은 C++17에서 도입된 기능으로, 값이 있을 수도 있고 없을 수도 있는 상황을 표현하는 데 사용됩니다. 이는 변수에 값이 없는 경우를 안전하게 처리할 수 있도록 해줍니다. std::optional은 주로 함수에서 **"값이 없을 수도 있다"**는 의미를 전달할 때 유용하며, 포인터를 사용하는 대안이 될 수 있습니다.std::optional의 기본 개념std::optional은 값을 포함할 수도 있고 포함하지 않을 수도 있는 컨테이너입니다. 값이 포함된 경우에는 유효한 값을 갖고, 그렇지 않은 경우에는 비어있는(empty) 상태가 됩니다.std::optional 선언 및 사용 방법std::optional을 사용하려면 헤더를 포함해야 합니다.1. 기본 사용법cpp코드.. 2024. 10. 7.
가상 베이스 클래스 (다이아몬드 상속 해결) 다중 상속문제중 동일한 클래스를 상속하는 부모 클래스를 여러 개 상속하면 모호함이 발생한다.이럴 때는 부모 클래스에 자체 기능을 정의하지 않으면 어느 버전의 메서드를 호출할지 모르는 모호한 문제를 해결할 수 있다.그런데 c++는 이렇게 중복되는 부모 클래스도 자체 기능을 가질 수 있도록 가상 베이스 클래스라는 기능을 제공한다.중복되는 부모가 가상 베이스 클래스라면 모호한 상황이 발생할일이 없다.다음 코드는 Animal 베이스 클래스에 sleep() 메서드를 추가하고, Dog와 Bird 클래스에서 Animal을 가상 베이스 클래스로 상혹하도록 수정했다.이 과정에서 만약 Animal 클래스 앞에 virtual 키워드를 지정하지 않으면 DogBird객체로 sleep()을 호출할 때 모호함이 발생해서 컴파일 에.. 2024. 10. 7.
파생 클래스의 복제 생성자와 대입 연산자 파생 클래스에서 포인터 같은 특수한 데이터(주로 포인터)가 있어서 디폴트가 아닌 복제 생성자나 대입 연산자를 정의해야할 경우가 아니라면 베이스 클래스에 복제 생성자나 대입 연산자가 있더라도 파생 클래스에서 다시 정의할 필요가 없다.파생 클래스에서 복제 생성자나 대입 연산자를 정의하는 코드를 생략하면 파생 클래스의 데이터 멤버에 대한 디폴트 복제 생성자나 대입 연산자가 생성되고, 베이스 클래스의 데이터 멤버에 대해서는 베이스 클래스의 복제 생성자나 대입 연산자가 적용된다.반면 파생 클래스에서 복제 생성자를 명시적으로 정의하면 다음 코드처럼 반드시 부모 클래스의 복제 생성자를 호출해야한다. 그렇지 않으면 객체에서 부모 부분에 대해 디폴트 생성자(복제 생성자가 아니다!) 가 사용된다.class Base{pub.. 2024. 10. 7.