프로그래밍
포르잔 C++ 바이블 Ch.11 연습문제 & 프로그래밍 문제
연습문제 1번 다음과 같이 2개의 클래스를 정의했을 떄, 위임(delegation)을 사용해서 두 클래스의 set 함수와 print 함수를 정의해주세요. //First 클래스 선언 class First { private: int a; public: void set(int a); void print() const; }; //Second 클래스 선언 class Second :public First { private: int b; public: void set(int a, int b); void print() const; }; 풀이. //First 클래스의 메소드 정의 void First::set(int a2) { First::a = a2; } void First::print() const { cout
[C++] 생성자와 소멸자
객체에는 특별한 멤버 함수인 생성자와 소멸자가 있다. 생성자가 호출되면 객체가 생성되고, 소멸자가 호출되면 객체가 정리된다. 생성자 생성자는 객체를 생성하는 멤버 함수이다. 생성자 내부에서 객체의 데이터 멤버를 초기화한다. 클래스를 정의할 때 멤버를 선언한다고 초기화가 이루어지는 것은 아니다. 선언 과정에서는 멤버의 이름과 자료형만 지정한다. 생성자는 1. 객체를 생성하고 데이터 멤버를 초기화하는 역할을 수행하므로 리턴값을 가질 수 없다. 2. 이름이 클래스의 이름과 같다. 3. 멤버를 초기화하려면 값을 변경해야 하므로 const 한정자를 붙일 수 없다. 4. 멤버 함수이므로 클래스 정의에서 선언해야 한다. class Circle { public: /*생성자*/ Circle(double radius);/..
while 반복문을 종료하는 방법: 센티넬, EOF, 플래그
카운터 제어 while 반복문 #include using namespace std; int main() { int counter = 0; while (counter > num; } cout > 연산자를 입력하면 된다. 이 연산자는 스트림에서 항목을 읽다가 EOF를 만나면 false를 리턴한다. //키보드 while(cin >> num) { ... } //파일 while(infile >> num) { ... } //키보드 입력 EOF로 반복 종료하기 #include using namespace std; int main() { int num; int sum{0}; while (cin >> num) { sum +..
[C++] 변수를 초기화하는 세 가지 방법
C++에서는 변수를 초기화 하는 방법이 세 가지 있다. 대입하기 (Copy Initialization) int num = 1; 대입 연산자(=)을 통해 우변의 값을 좌변에 대입하여 변수를 초기화하는 방법이다. C언어에서 사용하던 방법을 그대로 이용할 수 있다. 괄호 사용하기 (Direct Initialization) int num( 1 ); 변수 이름 다음에 바로 괄호를 사용하여 초기화할 수도 있다. 클래스와 같은 더 복잡한 객체를 효율적으로 선언할 수 있도록 해준다. 중괄호 사용하기 (Brace Initialization) int num{ 1 }; int num2 = { 2 }; int num3 {};//0으로 초기화 Uniform Initialization, List Initialization이라고도..
[C언어] 백준 25304. 영수증
문제 준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다. 영수증에 적힌, 구매한 각 물건의 가격과 개수 구매한 물건들의 총 금액 을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자. 입력 첫째 줄에는 영수증에 적힌 총 금액 $X$가 주어진다. 둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 $N$이 주어진다. 이후 $N$개의 줄에는 각 물건의 가격 $a$와 개수 $b$가 공백을 사이에 두고 주어진다. 출력 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes..
[C언어] 백준 2480. 주사위 세개
문제 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다. 예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게..
[C언어] 백준 25083. 새싹
문제 아래 예제와 같이 새싹을 출력하시오. 입력 입력은 없다. 출력 새싹을 출력한다. 구상 새싹을 표현하기 위해 큰 따옴표, 역 슬래쉬 등의 특수 기호가 들어갔다. 한 줄 한 줄 복사하면서 붙여넣되, IDE에서 오류가 발생했다고 잡아주거나 디버깅했을 때 정상적으로 출력되지 않는 부분을 확인하여 이스케이프 문자로 바꾸어주자. 코드 #include int main(void) { printf(" ,r\'\"7\n"); printf("r`-_ ,' ,/\n"); printf(" \\. \". L_r'\n"); printf(" `~\\/\n"); printf(" |\n"); printf(" |"); return 0; }
[C언어] 백준 3003. 킹, 퀸, 룩, 비숍, 나이트, 폰
문제 동혁이는 오래된 창고를 뒤지다가 낡은 체스판과 피스를 발견했다. 체스판의 먼지를 털어내고 걸레로 닦으니 그럭저럭 쓸만한 체스판이 되었다. 하지만, 검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다. 체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다. 동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다. 출력 첫째 줄에 입력에서 주어진 순서대로 몇 개의 피스를 더하거나 빼야 되는지를 출력한다. ..