[C++] 10-3. 교환법칙 문제의 해결
·
공부/C++
Point operator*(int times, Point& ref){ Ponit pos(ref.xpos*times, ref.ypos*times); return pos;}자료형이 다른 두 피연산자를 대상으로 하는 연산기본적으로 연산에 사용되는 두 피연산자의 자료형은 일치해야한다.그리고 일치하지 않으면, 형 변환의 규칙에 따라서 변환이 진행된 다음에 연산이 이뤄져야 한다.그러나 다음 예제에서 보이듯이 연산자 오버로딩을 이용하면, 이러한 연산 규칙에 예외를 둘 수 있다.#include using namespace std;class Point {private: int xpos, ypos;public: Point(int x = 0, int y = 0) : xpos(x), ypos(y) { } void Sh..
[C++] 10-1. 연산자 오버로딩의 이해와 유형
·
공부/C++
함수가 오버로딩 되면, 오버로딩 된 수만큼 다양한 기능을 제공하게 된다.마찬가지고 연산자의 오버로딩을 통해서, 기존에 존재하던 연산자의 기본 기능 이외에 다른 기능을 추가할 수 있다.operator+라는 이름의 함수#include using namespace std;class Point {private: int xpos, ypos;public: Point(int x=0, int y=0) : xpos(x), ypos(y) { } void ShowPosition() const { cout Point pos3 = pos1.operator+(pos2);이 문장은 pos1과 pos2의 덧셈 결과를 기반으로 객체를 생성하기 위한 문장이다.다음과 같이 pos2 객체의 멤버 함수를 호출하는 형태로 문장을 구성해도 그..
[C++] 9-2. 다중상속(Multiple Inheritance)에 대한 이해
·
공부/C++
다중상속이란, 둘 이상의 클래스를 동시에 상속하는 것을 말한다.일반적인 경우에서 다중상속은 다양한 문제를 동반한다.따라서 가급적 사용하지 않는것이 좋지만, 예외적으로 매우 제한적인 사용까지 부정할 필요는 없다.. 다중상속의 모호성(Ambiguous)다중상속의 대상이 되는 두 기초클래스에 동일한 이름의 멤버가 존재하는 경우에는 문제가 발생할 수 있다.유도 클래스 내에서 멤버의 이름만으로 접근이 불가능하기 때문이다.#include using namespace std;class BaseOne{public: void SimpleFunc() { cout  가상 상속(Virtual Inheritance)#include using namespace std;class Base {public: Base() { cout ..
[C++] 9-1. 멤버 함수와 가상 함수의 동작 원리
·
공부/C++
객체 안에 정말로 멤버함수가 존재하는가?구조체 변수와 전역함수를 이용해서 클래스와 객체를 흉내내보겠다. #include using namespace std;class Data {private: int data;public: Data(int num) : data(num) { } void ShowData() { cout #includeusing namespace std;//클래스 Data를 흉내 낸 영역typedef struct Data { int data; void (*ShowData)(Data*); void (*Add)(Data*, int);} Data;void ShowData(Data* THIS ) { cout data data += num; }int main(void) { Data obj1 = { 1..
[C++] 08-4. OOP 단계별 프로젝트 06단계
·
공부/C++
본 프로젝트에서는 이전에 정의한 Account 클래스를 상속하는 다음 두 클래스를 추가로 정의하고자 한다. - NormalAccount 보통 예금 계좌 - HighCreditAccount 신용 신뢰 계좌 NormalAccount클래스는 객체의 생성과정에서(생성자를 통해서) 이율 정보(이자비율의 정보)를 등록할 수 있도록 정의하자. 반면 HighCreditAccount클래스는 다음의 특성을 부여해서 정의하자. - NormalAccount클래스와 마찬가지로 객체 생성 과정에서 기본 이율을 등록할 수 있다. - 고객의 신용 등급을 A,B,C로 나누고 계좌 개설 시 이 정보를 등록한다. - A,B,C 등급별로 각각 기본 이율에 7%,4%,2%의 이율을 추가로 제공한다. 구현의 편의상 입금 시에 이자가 원금에 더..
[C++] 8-3.가상 소멸자와 참조자의 참조 가능성
·
공부/C++
가상 소멸자(Virtual Destructor)virtual 선언은 소멸자에도 올 수 있다.#include using namespace std;class First {private: char* strOne;public: First(const char* str) { strOne = new char[strlen(str) + 1]; } ~First() { cout  main함수에 따르면 First클래스의 소멸자와 Second 클래스의 소멸자가 동시에 호출되어야 한다. 그러나,실행 결과에서 보이듯이 객체의 소멸을 First형 포인터로 명령하니, First 클래스의 소멸자만 호출되었다. 따라서 이런 경우에는 메모리의 누수(Leak)가 발생하게 된다. 객체의 소멸과정에서는 delete 연산자에 사용된 포인터 ..
[C++] 8-2. 가상함수(Virtual Function)
·
공부/C++
기초 클래스의 포인터로 객체 참조하기C++ 컴파일러는 포인터 연산의 가능성 여부를 판단할 때, 포인터의 자료형을 기준으로 판단한다.실제 가리키는 객체의 자료형을 기준으로 판단하지 않는다. class First{public: void FirstFunc() { coutFirstFunc(); //O tptr->SecondFunc(); //O tptr->ThirdFunc(); //O sptr->FirstFunc(); //O stpr->SecondFunc();//O sptr->ThirdFunc();//X fptr->FirstFunc();//O fptr->SecondFunc();//X fptr->ThirdFunc();//X}}위의 예제를 보면 포인터 형에 해..
[C++] 8-1. 객체 포인터의 참조 관계
·
공부/C++
객체 포인터 변수 : 객체의 주소 값을 저장하는 포인터 변수C++에서 AAA형 포인터 변수는 AAA 객체뿐만 아니라,  AAA를 직접 혹은 간접적으로 상속하는 모든 객체를 가리킬 수 있다.(객체의 주소 값을 저장할 수 있다.) #include using namespace std;class Person {public: void Sleep() { cout Sleep(); ptr2->Sleep(); ptr3->Study(); delete ptr1; delete ptr2; delete ptr3; return 0;}위 그림과 같은 경우, 기본적으로 IS-A 관계에 따라 다음이 성립한다.BBB는 AAA이다.CCC는 BBB이다.그리고, IS-A 관계는 간접 상속의 관계 속에서도 유지되기 때문에 다음 문장도 성립한다...
[C++] 7-5. OOP 단계별 프로젝트 05단계
·
공부/C++
*윤성우의 열혈 C++ 프로그래밍 교재로 학습하며 정리하였습니다. 컨트롤 클래스의 특징프로그램 전체의 기능을 담당한다. 따라서 기능적 성격이 강한 클래스이다.컨트롤 클래스만 봐도 프로그램의 전체 기능과 흐름을 파악할 수 있어야한다.컨트롤 클래스가 아닌 대부분의 클래스를 가리켜 'Entuty 클래스'라 한다. Entity 클래스의 특징데이터적 성격이 강하다. 따라서 파일 및 데이터 베이스에 저장되는 데이터를 소유하고 있다.프로그램의 기능을 파악하는데 도움을 주지는 못한다.그러나 프로그램상에서 관리되는 데이터의 종류를 파악하는 데는 도움이 된다. 프로그램 설명AccountHandler라는 이름의 컨트롤 클래스를 정의하고, 앞서 정의한 전역 함수들을 이 클래스의 멤버함수에 포함시킨다.Account 객체의 저장..
[C++] 7-4. 상속을 위한 조건
·
공부/C++
IS-A 관계의 성립상속 관계가 성립하려면 기초 클래스와 유도 클래스 간의 IS - A 관계가 성립해야 한다. 예를들어,무선 전화기 is a 전화기노트북 컴퓨터 is a 컴퓨터전화기와 컴퓨터의 기본 기능을 '통화'와 '계산'이라고 한다면, 무선 전화기와 노트북 컴퓨터는 기본 기능에 '이동성'이라는 특성이 추가되었다.따라서 전화기와 컴퓨터를 기초 클래스, 무선 전화기와 노트북 컴퓨터를 유도 클래스로 정의할 수 있다.#define _CRT_SECURE_NO_WARNINGS#include #include using namespace std;class Computer {private: char owner[50];public: Computer(const char* name) { strcpy(owner, name..