언어

[Basic C++] #6_오버라이딩과 오버로딩의 차이점 C++ 개발 관련 내용 중, 오버로딩과 오버라이딩에 대해 알아보겠습니다. "전문가를 위한 C"의 8 항목, "클래스와 객체 마스터하기"의 내용입니다. #0. 오버로딩 vs 오버라이딩 1. 개념 C++의 오버로딩(Overloading)은 동일한 유효범위 내 혹은 동일한 상속 계층 내 여러 멤버 함수들이 서로 다른 시그니처를 갖고 함수 이름의 중복만 허용하는 기능입니다. C++의 오버라이딩(Overriding)은 부모 클래스에서 정의한 가상 함수를 자식 클래스에서 재정의 할 수 있도록 허용하는 기능입니다. 따라서, 오버라이딩과 오버라이딩의 차이점은 동일한 스코프 내 서로 다른 함수들이 함수 시그니처 중 동일한 이름만갖고 그 외 반환 타입, 파리미터 유..
[Basic C++] #5_메서드 종류, static 메서드, const 메서드 C++ 클래스 내부에서 사용되는 메서드의 종류에 대해서 알아보겠습니다. "전문가를 위한 C"의 8 항목, "클래스와 객체 마스터하기"의 내용입니다. #0. static 메서드 class A { public: ... private: static std::string DoubleToString(double val); static double StringToDouble(const std::string& str); }; 데이터 멤버와 마찬가지로 메서드 또한 특정 클래스의 모든 객체에 공통적으로 적용되어야 할 경우 "static" 키워드와 함께 선언합니다. "static" 메서드의 경우, 구현 부분에서 "static" 키워드를 적을 ..
[Basic C++] #4 데이터 멤버의 종류, static, const, 참조 멤버 C++ 클래스 내부 데이터 멤버들의 종류에 대해서 알아보겠습니다. "전문가를 위한 C"의 8 항목, "클래스와 객체 마스터하기"의 내용입니다. #0. static 데이터 멤버 class A { private: static int totalCount; }; Details 어떤 데이터 멤버가 특정 클래스에 종속되기는 하나, 객체 별로 각각의 복제본을 갖는 것이 불합리하다고 판단되면, "static" 키워드를 통해 해당 클래스의 객체들이 전역으로 접근 가능한 데이터 멤버를 생성합니다. #1. const 데이터 멤버 class A { public: const int maxHeight = 100;// 상수 멤버 선언 const ..
[Basic C++] #3_얕은 복제, 깊은 복제 C++ 개발 중 객체 생성, 복제, 그리고 대입 과정에서 발생하는, 얕은 복제와 깊은 복제에 대해 알아보겠습니다. #0. 얕은 복제 1. 복제 생성자, 얕은 복제 얕은 복제는 클래스가 기본적으로 제공하는 디폴트 복사 생성자 혹은 디폴트 대입 연산자를 활용해 원본 값과 복사된 값이 같은 참조를 가리키도록 합니다. 2. 코드 예제(복사 생성자) #include "Spreadsheet.h" void printSpreadsheet(Spreadsheet s); int main() { Spreadsheet s1(4, 3); // 가로 4, 세로 3의 스프레드 시트 생성 printSpreadsheet(s1); } Details "s1" 객체가 printSpreadsh..
[Basic C++] #2 C 스타일의 문자열, char*, const char* C++ STL에서 제공하는 std::string 클래스 이전에, C에서 제공하는 문자열의 주요 특징들에 대하여 알아보겠습니다. C 스타일 문자열의 장점과 단점 1. 장점 단순하다. 기본 문자 타입과 배열 구조만 사용한다. 가볍다. 저수준이다. 익숙하다. 2. 단점 범용 문자열 데이터 타입으로, 고급 작업 시 많은 시간이 소요된다. 메모리 작업에 민감하고, 디버깅 과정에서 버그를 찾기 어렵다. C++의 객체지향 개념을 사용 할 수 없다. 문자열 내부 동작 방식을 모두 이해해야 한다. 헤더 파일 #include 코드 예제, strlen, strcpy char* copyString(const char* str) { char* r..
[Basic C++] #1 Map, Unordered_map, 해쉬 테이블 자료구조 중 해쉬 테이블(Key-Value-Pair)과 C++ STL이 제공하는 컨테이너 "map" , 그리고 "unordred_map"에 대해서 알아보겠습니다. Hash Table(해쉬 테이블), key-value 쌍, 자료 구조 해쉬 테이블이란, "키"를 해쉬 값으로 매핑하여, 이 해쉬 값을 인덱스 혹은 주소 삼아 "값"을 "키"와 함께 쌍으로 저장하여 검색이 빠른 연관 배열 자료구조입니다 -"키"와 "값"의 1대 1 연관 관계를 형성하는 자료구조입니다. 쉽게 말하자면, "Key-Value"를 한 쌍으로 저장하는 자료구조입니다. 이때, 키 값을 입력으로 받는 해쉬 함수는 한 쌍으로 저장될 "값"의 저장 위치, 혹은 bucket..
[Effective C++] #41 템플릿, 암시적 인터페이스, 컴파일 타임 다형성, 유효 표현식 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 7장 "템플릿과 일반화 프로그래밍", 항목 41 "템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터"에 해당하는 내용입니다. 클래스, 명시적 인터페이스, 런타임 다형성 class Widget { public: Widget(); virtual ~Widget(); virtual std::size_t size() const; virtual void normalize (); void swap(Widget& w); ... }; Widget 클래스 객체는 Wid..
[Effective C++] #40 다중 상속 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 "상속, 그리고 객체 지향 설계", 항목 40 "다중 상속은 심사숙고해서 사용하자"에 해당하는 내용입니다. 다중 상속 MI(다중 상속)이란, 어떤 클래스가 두 개 이상의 상위 클래스로부터 상속받는 형태를 말합니다. 이번 항목에서는 다중 상속 사용 과정에서 주의할 점과 적절한 상황 등을 살펴보겠습니다. 1. 모호성 문제 class A { public: void checkOut(); ... }; class B { private: void checkOut(); ... }; class C : public A, public B..
[Effective C++] #39 private 상속 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 "상속, 그리고 객체 지향 설계", 항목 39 "private 상속은 심사숙고해서 구사하자"에 해당하는 내용입니다. private 상속의 특징 class Person {...}; class Student : private Person {...}; void Eat(const Person& p){...}; Person* p; Student* s; Eat(p);//OK! Eat(s);// NO! private 상속의 의미는 "is-implemented-in-terms-of"입니다. private 상속의 첫 번째 동..
[Effective C++] #38 객체 합성, private 영역 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 6장 "상속, 그리고 객체 지향 설계", 항목 38 "has-a 혹은 is-implemented-in-terms-of를 모형화할 때는 객체 합성을 사용하자"에 해당하는 내용입니다. 객체 합성 class Address {...}; class PhoneNumber {...}; class Person { public: ... private: std::string Name; Address addr; PhoneNumber voiceNumber; PhoneNumber faxNumber; } "객체 합성"이란, 어..
Hardii2
'언어' 카테고리의 글 목록 (13 Page)