목록전체 글 (294)
Minwoo Dev.
C++에서 상속과 다형성의 개념을 사용하다 보면, 오버라이딩 된 함수 중 원하는 것을 호출하기 힘든 상황이 있다. 예를 들어, 아래와 같이 Animal, MomDog, BabyDog라는 클래스가 존재하고 Animal #includeusing namespace std;class Animal{private: int age; int height;public: Animal(int a, int h) : age(a), height(h){} void Introduce(){ cout Introduce();} 실행 결과 main함수에서 다형성 중 업캐스팅을 사용하여 Animal 클래스의 참조로 BabyDog 객체를 가리키고 있다.이 상황에서 우리는 Introduce 함수를 실행하면 ..
문제예제 EmployeeManager4.cpp 를 확장하여 다음 특성에 해당하는 ForeginSalesWorker 클래스를 추가로 정의해보자."영업직 직원 중 일부는 오지산간으로 시장개척을 진행하고 있다. 일부는 아마존에서, 또 일부는 테러의 위험이 있는 지역에서 영업활동을 진행 중에 있다. 따라서 이러한 직원들을 대상으로 별도의 위험수당을 지급하고자 한다." 위험수당의 지급 방식은 '위험의 노출도' 에 따라서 다음과 같이 나뉘며, 한번 결정된 직원의 '위험노출도'는 변경되지 않는다고 가정한다.(이는 const 멤버변수의 선언을 유도하는 것이다.)리스크 A : 영업직의 기본급여와 인센티브 합계 총액의 30%를 추가로 지급한다.리스크 B: 영업직의 기본급여와 인센티브 합계 총액의 20%를 추가로 지급한다..
현실에서 상속이란 단어는 부모와 자식 간의 재산 상속의 의미로 많이 사용되곤 한다.하지만 프로그래밍에서는, 같은 기능을 가지고 있는 클래스들을 묶기 위해서 사용한다. 아래와 같은 상황에서 자주 사용하게 된다.이미 만들어둔 클래스를 가지고 기능과 변수를 추가하여 새로운 클래스를 만들 때 같은 기능을 하는 클래스가 있다면 그 두 클래스를 하나의 부모 클래스로부터 상속하게 만든다! 예를 들어, 에어팟의 기능을 나타내는 클래스가 존재한다고 하자.class Airpods{private: int battery; int volume;public: Airpods(int bat, int vol):battery(bat),volume(vol){} void music(){ cout 그리고,..
static 키워드를 공부하다 보면 일반적인 전역 변수와 같은 게 아닌가 ? 싶은 의문점이 들 것이다.만약 같은 개념이라면, 굳이 "전역 변수" 라는 용어 외에 static 이라는 키워드가 존재하지 않았을 것이다. 일반적인 전역 변수#includeusing namespace std;int n = 0; // 전역 변수 선언void showN(){ n++; cout 위 코드는 전역 변수를 선언하여 사용하는 코드이다.결과는 위와 같다. static 전역 변수#includeusing namespace std;static int n = 0;void showN(){ n++; cout 그리고, 위 코드는 static 전역변수를 사용한 코드이다.결과는 일반적인 전역 변수를 사용한 코드와 동일하..
static"전역"의 의미를 갖는 static 키워드를 사용하여 선언한 변수는, 프로그램 시작부터 종료까지 존재하게 된다.#includeusing namespace std;void showN(){ static int n = 0; // n은 사라지지 않고 계속 존재 n++; cout n이 static으로 선언되었기 때문에 1 이 5번 출력되는 것이 아니고 1 2 3 4 5 순으로 출력되게 된다. 반대로, 함수 밖의 전역 범위에 있는 경우도 있다.이런 경우에는 static을 붙이지 않아도 전역 변수로써 작동한다. (정확히는 두 방식은 차이가 있다. 다음 게시글에서 다루겠다.)#includeusing namespace std;static int n = 0;void showN(){ n++..
friendC++에서의 friend 선언은 해당 객체에 대해 접근을 허용할 때 사용한다.한마디로, 해당 객체의 private 영역에 대한 접근을 허용하게 해주는 키워드인 셈이다.자세한 건 예시를 통해 확인해보자. 우선, friend 선언은 가급적 사용을 지양해야 하며, 되도록 사용하지 않도록 프로그래밍 해야한다는 점을 기억하자 friend 선언이 사용되는 경우는 크게 두 가지가 존재한다. 1. 해당 객체가 다른 객체의 멤버에 대해 접근이 가능하도록 하고싶을 때#include#includeusing namespace std;class Girl;class Boy{private: int height; friend class Girl; // friend 선언public: Boy(int len)..
복사 생성자는 "="을 사용화여 연산을 수행하는 경우에 자동적으로 실행된다.Person p1("minwoo",23);Person p2 = p1;위와 같은 경우에, p2에 p1의 값을 그대로 "복사하여" 저장하게 된다.따라서 컴파일러는 위 코드를 아래처럼 변환하여 수행하게 된다. Person p1("minwoo",23);Person p2(p1); 기본 생성자의 모양과 굉장히 비슷하게 생기지 않았는가 ?다른 점이라면 객체에 들어가는 각 값이 아닌 또다른 하나의 객체가 통째로 들어간다는 점이다.우리는 위와 같은 모습의 생성자를 복사 생성자(Copy Constructor)라고 한다. 복사 생성자(Copy Constructor)class Person{private: char * name; int age;pu..
C++을 공부하다 보면 C언어에서부터 사용하던 malloc과 new가 헷갈릴 수 있다.new와 malloc의 차이점에 대해서 작성해보았다. mallocC언어에서 동적 할당을 사용할 때 사용하였다.malloc은 지정된 바이트 수 만큼 메모리를 할당한다.malloc은 초기화를 진행하지 않고 할당만을 수행한다.malloc은 "함수"이다.int* ptr = (int*)malloc(sizeof(int)); // 단일 정수형 변수 할당*ptr = 5;free(ptr); // 메모리 해제int* arr = (int*)malloc(10 * sizeof(int)); // 정수형 배열 할당free(arr); // ..
추상 클래스(abstract class)추상 메서드(abstract method)가 포함된 클래스추상 메서드가 하나라도 포함되면, 그 클래스는 추상 클래스로 선언해야한다. 다중 상속이 불가능하다추상 메소드 외에 일반 메소드, 생성자, 필드를 가질 수 있다."상속 관계"에 초점이 맞춰져있다.객체를 생성할 수 없다.추상 클래스를 추상 클래스에 상속할수도 있다.import java.util.Stack;abstract class Animal{ // 추상 클래스 Animal public Animal(){} public void eat(){ System.out.println("I am eating now"); } abstract public void cry();}class Cat ..
전위 표기법(prefix)연산자가 피연산자의 앞에 오게되는 표기법을 의미한다.+32 예를 들어, 3+5*2라는 식을 전위 표기법으로 바꾼다면, 우선순위를 정하여 괄호를 친다.(3+(5*2)) -> 3+(*52) -> +3*52 위와 같은 순서로 전위식을 구해낼 수 있다. 중위 표기법(infix)우리가 보통 수식을 적을 때 사용하는 방법이다.3+2 중위 표기법은 사람이 보통 사용하는 방법이기에, 컴퓨터가 인식할 수 있도록 변환하여 사용하게 된다. 후위 표기법(postfix)연산자가 뒤쪽에 있고 피연산자가 앞쪽에 위치한 식을 의미한다.32+ 컴퓨터는 수식을 후위 표기법 방식으로 인식한다. 중위식인 3+5*2를 마찬가지로 후위식으로 변환한다면, 괄호를 사용하면 쉽다.3+5*2 -> (3+(5*2)) -..