본문 바로가기

Category

[C++] 오버라이딩 (Overriding) 오버라이딩 (Overriding) : 오버라이딩(Overriding)이란 기본 클래스에 선언된 멤버와 같은 형태의 멤버를 파생 클래스에서 선언하는 것이다. 오버라이딩에 관해서 더 자세히 알아 보기 전에 오버라이딩을 재정의로 알고 있으신분들은 오버라이딩에 등장하는 특성이 재정의 인거지 오버라이딩 자체는 재정의가 아닌것을 명심하고 들어가보자. 은닉의 효과 #include using namespace std; class AAA { public: void fct(){ cout 더보기
[C++] 상속 다섯번째, 상속된 객체와 참조와의 관계 객체 레퍼런스 : 객체 레퍼런스란 객체를 참조 할 수 있는 레퍼런스로 클래스 포인터(객체 포인터)의 특성과 일치 한다. #include using namespace std; class Person { public: void Sleep(){ cout 더보기
[C++] 상속 네번째, 상속된 객체와 포인터와의 관계 (객체 포인터) 객체 포인터 : 객체 포인터란 객체를 가리킬 수 있는 포인터를 의미한다. (객체의 주소 값을 저장할 수 있는 포인터) - 예를 들어 A 클래스의 포인터는 A 객체뿐만 아니라, A클래스를 상속하는 파생 클래스 객체의 주소 값도 저장이 가능하다 다음 상속 관계를 한번 살펴 보도록 하자. is-a관계에 의해서 ScholarStd 객체는 Student 객체이자 Person 객체도 동시에 된다. ("ScholarStd 는 Person 객체이다." 이런 말도 틀린말은 아니다) 그러면 "Student 객체는 ScholarStd 객체이다" 는 성립이 안된다. is-a 관계는 아래쪽으로 성립이 안된다. 우리가 프로그램상에서 서로의 객체를 생성했다고 해보자. 아래의 예제는 is-a 관계에서 위의 그림은 소스코드로 나타낸 .. 더보기
[C++] 상속 세번째, 상속의 조건 (is-a 와 has-a 그리고 포함) is-a 관계 : 상속에 있어서 우리는 주로 public 상속에 대해서 이야기 할 것이고, 사용할 것이다. 그럼 우리가 주로 사용할 puiblic 상속을 사용할때는 is-a관계가 성립되도록 만들어야 한다. 그럼 is-a 관계는 무슨 관계이냐? 말그대로 is a : ~은 ~이다 라는 관계를 성립하자는 이야기이다. 예를 들어 사람과 학생의 관계를 생각해보자 (Person - Student) - Person is a student : 사람은 학생이다. 이것은 성립이 안된다. 모든 사람이 학생일수는 없는 노릇 아닌가? - Student is a person : 학생은 사람이다. 이것은 성립된다. 그래서 우리가 상속 클래스를 만들때, Student 클래스는 파생클래스로 Person 클래스를 상속할 수 있는것이다... 더보기
[C++] 상속 두번째, 세가지 형태의 상속 (private, protected, public) 다음과 같이 상속(Inheritance)의 경우를 보자 class A : public B { }; B클래스를 public으로 상속하겠다는 의미로 우리들이 일반적으로 많이 사용하는 class A : [상속형태] B 형태를 가지고 있다. 기본적으로 기본 클래스는 파생 클래스에 의해 상속되어지는 과정에서 접근 권한이 변경이 된다. 그 상속 형태에 따라 멤버들을 상속하는데 있어서 접근권한을 무엇으로 변경할 것이냐 하는 얘기이다. 아래는 기본 클래스와 상속의 형태에 따른 파생클래스에서의 기본클래스로의 접근범위를 표로 나타낸것이다. 일반적으로 public을 가장 많이 쓰이므로 그 부분에 초점을 맞춰서 보는 것이 좋다. 그냥 도표로는 언뜻 이해 하기가 힘드니, 이것을 코드와 분석을 통해서 더 자세히 알아 보자.(상속.. 더보기
[EC++] 항목 6. 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자 이 항목은 이전 항목 5와 연장선상에 있는 항목이라고 할 수 있는데요, 이 세상에 복사가 불가능한 유일한 문서가 있다고 가정해 봅시다. 그 문서를 이름이 Unique_Doc 이라고 해 봅시다. 이 Unique_Doc를 나타내는 클래스가 있다고 해봅시다. class Unique_Doc { ................. } 이 객체는 복사가 불가능하므로 이것의 사본(copy)을 만드는 것 자체가 이치에 맞지 않는다고 볼 수 있습니다. 그래서 Unique_Doc 객체를 복사하는 아래와 같은 코드는 컴파일 되지 않았으면 하는 생각을 가지게 됩니다. void main() { Unique_Doc Ud1; Unique_Doc Ud2; Unique Ud3(Ud1); //경고 : 절대 사용하지 마시오!! Ud1 = U.. 더보기
[C++의 특징 - 4] 구조체와 클래스 (Structure & Class) 1. C언어에서의 구조체 : 구조체란 다른 타입을 가지는 변수들을 하나의 이름으로 묶어둔 것이라고 할 수 있다. 그럼 구조체를 왜 사용할까? 구조체는 관련있는 데이터를 하나의 자료형으로 묶어서, 프로그램의 구현 및 관리가 용이 해진다는 장점을 가지고 있기 때문이다. C언어에서 구조체에 대한 불만이라고 한다면, 구조체를 기본 자료형으로 인식해 주지 않는다는 점이다. 아래 예제를 보자. //Person이라는 사용자 정의 자료형 (Structure) struct Person{ int age; char name[10]; }; int main() { int a =10; Person P //C에서는 에러가 난다. return 0; } 2. C++에 와서 달라진점? C++로 넘어오면서 구조체 사용에 대해 달라진점이 .. 더보기
[C++] 상속 첫번째, 멤버 이니셜라이저 (Member Initializer) 와 Protected 우선 다음의 상속이 구현된 소스 코드를 보고 문제점이 무엇인지 알아 보자. #include using namespace std; class Person { int age; char name[20]; public: int GetAge() const { return age; } const char* GetName() const { return name; } Person(int _age=1, char* _name="noname"){ age=_age; strcpy(name, _name); } }; class Student: public Person { char major[20]; //전공 public: Student(char* _major){ strcpy(major, _major); } const char* G.. 더보기
[C++] 상속과 다형성 (Inheritance & Polymorphism) 우선 여기서는 상속과 다형성에 대한 간단한 의미만 정리 하고 넘어갈 것입니다. 다음에 상속과 다형성에 대해서 더 자세한 포스팅을 할 것입니다. 상속 (Inheritance) : 상속은 기존의 클래스를 토대로 해서 새로운 클래스를 만드는 방법이라고 할 수 있다. 객체지향 프로그래밍을 사용해서 워드 프로세서를 만드는 경우를 생각해보자. 고객으로부터 웹페이지 형식으로 문서를 저장할 수 있게 요구 받았다고 하면, 이때는 문서 저장과 관련된 기존의 클래스를 조금 개조해서 웹 페이지 형식으로 저장하게 만들 수 있다. 이렇게 기존의 클래스를 조금 고쳐서 새로운 클래스를 만들고 싶을 때 상속을 사용할 수 있다. 일상생활에서의 상속은 부모의 재산이나 부채를 그대로 이전하는 것을 의미하는데, 객체지향 프로그래밍에서의 상속.. 더보기
[EC++] 항목 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 만약 우리가 클래스를 만들때, 클래스안에 아무것도 넣지 않았다면, 컴파일러가 복사 생성자(copy constructor), 복사 대입 연산자(copy assignment operator), 소멸자(destructor)를 저절로 선언해 주게 됩니다. 이때 컴파일러가 만드는 함수의 형태는 모두 기본형이고 public 멤버 이면서 inline 함수 입니다. class Empty(){}; 즉, 위와 같이 선언된 클래스는 아래와 같다는 이야기 입니다. class Empty{ public: Empty() {} //기본 생성자 Empty(const Empty& emt){} //복사 생성자 ~Empty(){} //소멸자 Empty& operator = (const Empty& emt){} //복사 대입 연산자 }; 기.. 더보기