728x90

연재 완료/C++ Lang 이론 10

10-3. 연산자 오버로딩(2)

PART 2. 객체 지향 프로그래밍 - chapter 10. 프렌드와 연산자 중복 #pragma once #include using std::cout; using std::cin; using std::endl; // const char& operator []() const {} // char& operator [] () 두 함수는 별개의 함수가 된다. //재정의가 금지된 연산자 //1) 선택 연산자 : . //2) 포인터 선택 연산자 : .* //3) 영역 연산자 : :: //4) 조건 연산자 : ? : //5) 크기 연산자 : sizeof //재정의가 가능한 연산자는 다 적어두고 실제 구현은 생략했다. //리턴형이 정해진 것이 아니라면 다 point클래스를 반환하도록 했다. class point { p..

10-2. 연산자 오버로딩 (1)

PART 2. 객체 지향 프로그래밍 - chapter 10. 프렌드와 연산자 중복 Ⅰ 연산자 중복 기본사항 1. C++의 연산자는 각 기본형들에 대해 동작이 미리 정의된 함수라고 볼 수 있다 .2. 클래스는 또한 사용자 정의형이므로 연산자를 이용한 연산이 가능하면 좋을 것이다.3. 이를 위한 메커니즘이 연산자 오버로딩이다. 4. 다만 새로운 연산자를 만드는 것은 허용되지 않는다.5. 기본형에 대한 연산을 재정의하는 것은 허용되지 않는다.6. 연산자들의 우선순위나 결합 법칙은 변경되지 않는다.7. 단항 연산자를 이항 연산자로 재정의하거나, 이항연산자를 단항연산자로 만들 수는 없다.8. .(멤버 선택 연산자), .*(멤버 포인터 선택 연산자), ::(범위 확인 연산자), ?:(조건 연산자)는 중복정의가 불가..

10-1. 프렌드 키워드

PART 2. 객체 지향 프로그래밍 - chapter 10. 프렌드와 연산자 중복 1. friend 키워드 - 기본적으로 private로 선언된 멤버들은 외부에서 접근할 수 없다. 심지어는 상속받은 클래스도 부모의 private 멤버들에는 접근할 수 없다. - friend 키워드는 선언한 쪽의 private 멤버를 외부에서 접근할 수 있도록 허용한다는 의미이다. - friend 지정은 단방향으로 명시적으로 지정한 대상에만 적용된다. - friend 지정은 전이되지 않으며 friend의 friend는 인정되지 않는다. - friend 지정은 상속되지 않는다. - friend 지정은 클래스 내에서만 할 수 있고, 다른 클래스, 다른 클래스의 멤버 함수, 전역 함수에 할 수 있다. Header.h #pragm..

9. 다형성

PART 2. 객체 지향 프로그래밍 - chapter 9. 다형성 1. 다형성(Polymorphism)이란? - 다형성은 객체들의 타입이 다르면 똑같은 메시지가 전달되더라도 서로 다른 동작을 하는 것을 말한다. - 메시지를 보내는 측에서는 객체가 어떤 타입인지 알 필요가 없어야 한다. - 다형성은 객체 포인터나 객체 참조자를 통하여 이루어진다. - 객체 포인터도 기본적으로 타입이 맞는 객체만을 가리킬 수 있지만, 부모 클래스 포인터는 자식 클래스 객체를 가리킬 수 있다. - 이를 상향 형변환이라고 한다. - 상향 형변환을 하면 상속 받은 부분만을 사용할 수 있고 나머지는 사용할 수 없다. 즉 참조할 수 있는 영역의 크기가 축소된다. - 반대로 부모 클래스를 가리키는 포인터가 자식 클래스를 가리키도록 형변..

8. 상속

PART 2. 객체 지향 프로그래밍 - chapter 8. 상속 1. 상속(Inheritance) - 기존에 존재하는 유사한 클래스로부터 속성과 동작을 이어받고 자신에게 필요한 기능을 추가하는 기법 - 자식 클래스가 이미 존재하는 부모클래스로부터 멤버들을 물려받는 것. class ChildClass : /*접근지정자(public, protected, private)*/ ParentClass { ... //추가된 멤버 변수나 멤버 함수 } - 자식 클래스는 항상 부모 클래스를 포함한다. - 부모 클래스(Parent Class) == 슈퍼 클래스(Super Class) == 베이스 클래스(Base Class) - 자식 클래스(Child Class) == 서브 클래스(Sub Class) == 파생된 클래스(D..

7. 클래스의 활용

PART 2. 객체 지향 프로그래밍 - chapter 7. 클래스의 활용 1. 객체 포인터 (Object Pointer) - 객체도 일반 변수처럼 정적 메모리 할당이나 동적 메모리 할당을 할 수 있다. - 정적 생성된 객체에 접근할 때는 .(dot) 연산자를 사용하고, 동적 생성된 객체에 접근할 때는 ->(Arrow)연산자를 사용한다. 2. this 포인터 (this Pointer) - 자기 자신을 가리키는 객체 포인터. - this는 C++의 예약어이므로 식별자로 사용할 수 없으며, 따로 선언하지 않아도 자동으로 생성된다. - 멤버 변수의 이름과 멤버 함수의 매개 변수의 이름이 동일한 경우 멤버 변수의 이름 앞에 'this->'를 붙여야한다. - 그 외에는 함수의 매개변수나 반환값으로 자기자신을 사용할..

6. 생성자와 소멸자

PART 2. 객체 지향 프로그래밍 - chapter 6. 생성자와 소멸자 1. 생성자(Constructor) - 생성자는 객체가 생성될 때 자동으로 호출되어 객체를 초기화하는 역할을 한다. - 생성자는 클래스와 이름이 같고, 반환값이 없는 함수이다. 매개변수는 받으니 여러개의 생성자를 중복 정의할 수 있다. - 생성자가 호출되지 않으면 객체 생성도 안되므로 특수한 경우를 제외하고 생성자는 public으로 선언되어 있어야 한다. - 생성자를 명시적으로 작성하지 않았다면 자동으로 디폴트 생성자가 추가되며, 객체가 생성될 때 디폴트 생성자가 호출된다. - 자동으로 추가된 디폴트 생성자는 매개변수도 없고, 함수 본문도 없으므로 아무일도 하지 않는다. - 다른 생성자를 추가하면 디폴트 생성자는 자동으로 추가되지..

5. string 클래스 (기본사항)

PART 2. 객체 지향 프로그래밍 - chapter 4. 객체 지향 소개 C++에서 문자열을 대신해주는 클래스인 string 클래스. 아래의 대입, 비교 등은 연산자 오버로딩을 이용해 구현해둔 것.//char형 배열로 문자열을 표현하는 것을 대신하는 string클래스 #include #include using std::string; using std::cout; using std::cin; using std::endl; int main() { //string 클래스 사용 cout

4. 클래스의 기초

PART 2. 객체 지향 프로그래밍 - chapter 5. 클래스의 기초 예제 : 날짜 정보를 저장하는 Date 클래스 Date.h #pragma once #include #include //클래스 만들기 class Date { //'private' 직접 접근 불가 private: //'멤버 변수'(=필드) 선언 int year; int month; int day; //'public' 직접 접근 가능 public: std::string memo = "실험"; public: //'멤버 함수'(=메소드) 선언 void setDate(int year, int month, int day); void printDate(); int getYear(); int getMonth(); int getDay(); Date(..

3. 객체, 메시지, 클래스, 인스턴스

Part 2. 객체 지향 프로그래밍 - chapter 4. 객체 지향 소개 1. 객체(Object) - 객체는 상태(State)와 동작(Behavior)으로 구성되어 있다. - 상태는 객체의 특징값(속성)이고, 동작은 객체가 취할 수 있는 동작이다. - 객체의 상태는 필드(멤버 변수)로, 동작은 메소드(멤버 함수)로 표현할 수 있다. 2. 메시지(Massage) - 대부분의 객체는 무언가를 실행하기 위해서 다른 객체를 필요로 한다. 이를 위해서는 객체간의 통신 메커니즘이 필요하다. - 객체는 메시지(Massage)를 통해 다른 객체와 통신하고 상호 작용한다. - 메시지는 메시지를 받는 객체, 메시지의 이름, 메시지의 매개 변수의 세 가지의 구성 요소로 이루어진다. - "메시지 전달"은 곧 "멤버 함수 호..

반응형