본문 바로가기
반응형

전체 글113

[C++] 함수 오버로딩(Function overloading) 함수 오버로딩(Function overloading) 같은 이름의 함수를 여러 개 사용할 수 있습니다. 예를 들어 아래의 코드와 같이 나타낼 수 있습니다. int foo(int x); //OK int foo(int x, int y); //OK int foo(char x); //OK void foo(double x); //OK void foo(int x); //ERROR! 위의 코드와 같이 같은 함수명으로 여러 가지를 선언할 수 있습니다. 하지만 마지막 foo의 경우 에러가 발생합니다. 그 이유는 맨 위에 이미 매개변수가 int인 foo를 받았기 때문입니다. 만약 foo(5)를 입력했을 때 컴파일러 입장에서 첫 번째를 말하는 건지 마지막을 말하는 건지 구분을 못합니다. 컴파일 과정에서 타겟 함수를 정한다... 2023. 10. 29.
[C++] 얕은 복사(Shallow copy) VS 깊은 복사(Deep copy) 얕은 복사 (Shallow copy) 얕은 복사의 경우 데이터의 주소를 복사하는 것입니다. 다음 아래 그림을 보면 이해하기 쉽습니다. x = y를 통해 y의 주소값을 x에 넣습니다. 그렇기 때문에 *y의 값이 변하면 마찬가지로 *x의 값이 *y와 같게 변합니다. 깊은 복사 (Deep copy) 깊은 복사의 경우 데이터 값을 완전히 복사하는 것을 말합니다. 그렇기 때문에 복사된 값과 이전의 값은 완전히 독립적으로 됩니다. 얕은 복사 예시코드 다음은 얕은 복사에 관한 예시코드입니다. #include #include #include class Car{ //class declaration public: //members accessible from outside Car(char* name){ //default .. 2023. 10. 29.
[C++] call by value/ call by pointer/ call by reference 함수 인자를 전달하는 방법 함수 인자를 전달하는 방법은 3가지가 존재합니다. - call by value (인수값을 복사하고 복사본을 전달합니다.) - call by pointer (인자의 주소를 전달합니다.) - call by reference ( 인자의 참조를 전달합니다.) Call by value 기본적으로 call by value는 인수값을 복사하고 복사본을 전달합니다. 호출자의 값은 호출 수신자의 변경사항에 반영되지 않습니다. 암시적(implicitly)으로 인수의 복사 생성자를 호출합니다. 다음 아래의 예시코드를 보겠습니다. #include void Add3(int y){ y +=3; } int main(){ int x = 1; std::cout 2023. 10. 28.
[C++] LHS변수와 RHS변수/const 활용(pointer const etc..) LHS와 RHS LHS는 left-hand-side 표현입니다. RHS는 right-hand-side 표현입니다. 예를 들어 x = 10이라고 할 때 LHS : x RHS : 10 이렇게 됩니다. C++ 메모리 모델안 basic 각각의 변수는 주소를 가집니다. &x (only in RHS) : 변수 x의 주소를 리턴합니다. &x : 0 &y : 4 x (in RHS) : 변수의 주소안 값을 할당합니다. x는 16을 리턴합니다. y는 99를 리턴합니다. x (in LHS) : RHS 값을 변수의 주소에 저장합니다. "x = 7" x주소 0에 7이 저장됩니다. "y = 88" y주소 4에 88이 저장됩니다. 위를 표시하면 다음 아래와 같이 됩니다. 포인터 (Pointers) 포인터 값은 주소를 가리킵니다. .. 2023. 10. 28.
[C++] 네임스페이스(Namespace)를 사용하는 이유 네임스페이스(Namespace) 네임스페이스는 특정한 식별자(함수, 변수, 클래스)를 포함하는 코드지역을 뜻합니다. C++에서는 같은 식별자를 여러 번 선언/정의할 수 없습니다. 그렇지만 우리가 식별자를 여러번 사용하고 싶을 때가 있는데요. 네임스페이스는 식별자를 여러번 선언/정의하는 것을 허용합니다. 네임스페이스는 특정한 식별자를 가져야 합니다. 하지만, 식별자는 네임스페이스 전체에서 동일한 이름을 가질 수 있습니다. ★ main 함수는 네임스페이스가 될 수 없습니다. ★ 아래 예시코드를 보면서 더 구체적으로 설명하겠습니다. 예시코드 #include namespace ns1{ int value = 3; } namespace ns2{ std::string value("Hello World"); } int.. 2023. 10. 28.
[C++] 클래스 안에서의 명명 규칙 클래스 이름은 파스칼(Pascal) 표기법을 사용해라 클래스 이름의 경우 파스칼 표기법으로 나타냅니다. Bad class Cat {...}; class Person {...}; class SeoulCity{...}; Good class cat {...}; class PERSON {...}; class seoul_city{...}; 멤버 변수의 이름은 뱀(Snake) 표기법을 사용해라 뱀(Snake) 표기법이란 "_"를 사용하는 것을 말합니다. 이 명명규칙은 지역 변수와 멤버변수를 구별하는데 사용합니다. Bad class Person{ int Age; std::string home_address; }; Good class Person{ int age_; std::string home_address_; };.. 2023. 10. 27.
[C++] 선언(Declaration) VS 정의(Definition)/헤더파일과 소스파일 분리 + 예시코드 클래스 선언(Class declaration) 멤버 필드 선언은 이전과 같이 선언해야 합니다. 멤버 함수 선언의 경우 함수 선언에 있어 본문에 선언할 함수가 없어야 합니다. 함수 선언의 경우 다음의 구조를 따릅니다. ReturnType FunctionName(Parameters) 예시코드 #include #include class Animal{ Animal(std::string name); //멤버 함수 선언 void set_name(std::string name); //멤버 함수 선언 std::string name(); //멤버 함수 선언 private: std::string name_; }; 클래스 정의(Class definition) 선언이 진행된 뒤 선언과는 별도로 클래스에서는 클래스 멤버함수를 .. 2023. 10. 26.
[C++] 클래스 (Class)/ 객체 (Object)/, 접근지정자(Access modifier)public, protected, private/ 여러 종류 생성자(Constructor)default, Implicitly, Explicitly, Copy/+ 예시코드 클래스 선언 (Class declaration) 클래스 선언은 다음과 같이 됩니다. class Car{ public : Car(std::string name, int speed, std::string color): name_(name), speed_(speed), color_(color) {} int speed_up(int km){ speed_ += km; return speed_; } private: std::string name_; int speed_; std::string color_; }; // 클래스 끝 ";" 잊지말기 클래스 선언에 있어서 끝에 ";"을 잊으면 안됩니다. 객체 생성 (Object creation) 객체를 생성하는 방식에는 2가지 방법이 있습니다. 첫 번째는 직접 초기화(Dire.. 2023. 10. 25.
[C++] C++ 객체지향 언어에 대해 + 예시코드 (Class, Object, Abstract, Inheritance, Encapsulation, Polymorphism) 절차지향 언어인 C언어와는 다르게 C++은 자바와 같은 객체지향(OOP)의 개념을 가집니다. 객체지향의 언어는 좋은 점을 많이 가지고 있는데요. 모델링이 용이하고, 재사용 가능하고, 유지보수 등에 있어서 여러 장점을 가집니다. 이제 C++의 핵심 객체지향 언어에 대해 알아보겠습니다. OOP 개념들 객체지향(OOP)은 다음 6가지 개념들을 가집니다. - Class and Object (클래스와 객체) - Abstraction (추상화) - Inheritance (상속) - Encapsulation (캡슐화) - Polymorphism (다형성) 1. Class (클래스) 클래스는 객체(Object)의 설계도라고 보시면 됩니다. 어떠한 물건을 만드는데에 있어서 설계도가 필요하듯이 클래스에서는 객체에 대한 설.. 2023. 10. 24.
[C++] C++ 명명규칙 : 우아하게 프로그래밍하는 방법 팀별 프로젝트나 회사에서 어떠한 코딩을 진행할 때 서로가 편히 알아볼 수 있게 만들어 놓은 규칙이 있습니다. 이것을 명명규칙(Naming Convention)이라고 합니다. 만약 이러한 명명규칙이 없을 경우 코드의 변수이름, 주석 등 사람들마다 각자 개성을 가지고 작성할 경우 다른 사람이 코드를 볼 때 시간이 많이 걸리고 못 알아먹는 상황이 나오게 됩니다. 그렇기 때문에 명명규칙에 대해 알아둘 필요가 있습니다. 명명규칙은 일반적일 때, 주석을 달을 때, 변수를 생성할 때 등 여러 가지에 대해 규칙을 가집니다. 아래에서는 일반적인 것부터 함수선언까지 나타내겠습니다. 1. General : 의미있는 이름을 작성해라 변수의 이름을 생성할 때는 의미있는 이름으로 작성해야 합니다. 만약 아래와 같이 변수 이름을 .. 2023. 10. 23.
728x90
반응형