1주차 9장 객체와 클래스 1,2 예상문제
1. 구조체와 클래스 예상문제
2. 시험 직접에 풀어보기
1. 클래스와 객체에 대한 설명을 읽고 T / F 로 표시하시오.
1) 객체의 상태(state)은 데이터 필드, 즉 변수로 표현되고 이 변수에 데이터가 저장됩니다.
2) 객체의 행동(behavior)은 변수에 의해 정의됩니다.
3) 클래스는 멤버 변수만으로 이루어져 있습니다.
4) 클래스(class)는 객체가 어떻게 생겨야 하는지를 적어놓은 설계도와 같습니다. 객체(object)는 이 설계도를 통해 만들어진 인스턴스(instance)입니다.
5) 객체의 크기는 데이터 필드의 크기와 같습니다.
6) 대입연산자(=)를 사용해 하나의 객체로부터 다른 객체로 데이터필드와 함수를 복사할 수 있습니다.
답 ▼
1) T
2) F, 객체의 행동(behavior)은 함수에 의해 정의됩니다.
3) F, 클래스는 멤버 변수와 멤버 함수로 이루어져 있습니다.
4) T
5) T, 객체의 크기는 데이터필드의 크기와 같습니다. 멤버함수는 같은 클래스의 모든 객체에 공유되므로 하나의 복사본만 생성됩니다. 그래서 실제로 객체의 크기는 크지 않습니다.
6) F, 대입연산자(=)를 사용해 하나의 객체로부터 다른 객체로 데이터필드(변수)만 복사할 수 있습니다.
2. 생성자에 대한 설명을 읽고 T / F 로 표시하시오.
1) 생성자는 클래스 자신과 같은 이름을 가집니다.
2) 생성자는 void 형만 반환할 수 있는 함수입니다.
3) 생성자는 객체가 생성될 때 한번 자동으로 호출되므로 변수를 초기화하는 데 주로 사용합니다.
4) 생성자는 오버로딩이 불가능합니다.
5) 생성자는 main함수에서 호출할 수 없습니다.
6) 생성자는 접근 지정자가 private: 이어도 사용할 수 있습니다.
7) 매개변수가 있는 생성자를 사용하다가 오버로딩하지 않고 매개변수가 없는 생성자를 사용할 수 있습니다.
답 ▼
1) T
2) F, 반환 유형이 없는 함수입니다.
3) T
4) F, 생성자는 오버로딩이 가능합니다.
5) T
6) F, 생성자는 클래스 변수를 만들때(객체가 생성될 때) 한번 자동으로 호출되기 때문에 접근 지정자가 public: 으로 설정되어야 합니다.
7) F, 프로그래머가 생성자를 만들지 않으면 c++ 컴파일러가 매개변수, 내용이 비어 있는 기본 생성자(default constructor)을 만듭니다. 하지만 프로그래머가 생성자를 만들면 기본 생성자를 제공하지 않습니다. 그러므로 매개변수가 있는 생성자를 사용하다가 매개변수가 없는 생성자를 사용하고 싶다면 프로그래머가 직접 정의한 후에 사용할 수 있습니다.
3. 주석 안에 아래의 출력값이 나오도록 코드를 작성하시오. 단, 객체의 이름은 c1,c2,c3입니다.
#include <iostream>
using namespace std;
class Circle
{
public:
double radius;
Circle() {
radius = 1;
}
Circle(double newRadius) {
radius = newRadius;
}
double getArea() {
return radius * radius * 3.14159;
}
};
int main() {
/*
작성한 코드가 들어갈 자리
*/
return 0;
}
답 ▼
Circle c1; //인수가 없는 생성자를 사용할 때에는 괄호가 있으면 안됩니다.
Circle c2(25);
Circle c3(125);
cout << "c1의 반지름 : " << c1.radius << " 면적 : " << c1.getArea() << endl;
cout << "c2의 반지름 : " << c2.radius << " 면적 : " << c2.getArea() << endl;
cout << "c3의 반지름 : " << c3.radius << " 면적 : " << c3.getArea() << endl;
4. 다음 생성자를 초기화 목록(initializer list)를 사용하여 초기화하시오.
Circle() {
radius = 1;
}
Circle(double newRadius) {
radius = newRadius;
}
답 ▼
Circle(): radius(1) {
}
Circle(double newRadius) : radius(newRadius){
}
6. c++에서 생성자와 일반 함수의 공통점과 차이점을 말하시오.
답 ▼
생성자는 클래스만의 특별한 함수입니다. 생성자는 return값이 없고 호출할 수 없습니다. 하지만 c++에서 생성자는 일반 함수처럼 오버로딩이 가능합니다.
7. 문제 3번에서 정의된 Circle 클래스를 사용하였을 때 다음 코드의 출력은 무엇인가?
Circle c1(5);
Circle c2(6);
c1 = c2;
cout << c1.radius << " " << c2.radius << endl;
답 ▼
6 6
8. 다음 코드는 무엇이 잘못되었는가?
//(a)
int main()
{
Circle c1();
count << c1.getRadius() << endl;
return 0;
}
//(b)
int main()
{
Circle c1(5);
Circle c1(6);
return 0;
}
//(c)
class Circle
{
public:
double radius;
Circle() {
radius = 1;
}
}
답 ▼
(a)의 경우, 인수없는 생성자가 괄호와 함께 사용되었습니다. 익명 개체와 헷갈릴 수 있기 때문에 인수없는 생성자는 괄호와 같이 사용될 수 없습니다. (b)의 경우, 같은 이름의 객체가 다시 사용되었습니다. 객체 이름은 한번 선언하면 다시 선언될 수 없습니다. (c)의 경우 클래스 마지막에 세미 콜론이 없습니다.
9. 다음 중 올바른 문장을 모두 고르시오.
(1)
Circle c;
(2)
Circle c = Circle();
답 ▼
1,2
(1)은 인수 없는 생성자를 이용해 객체를 선언한 것이므로 올바릅니다.
(2) 도 인수 없는 생성자로 익명 개체를 만들고 객체c 를 선언해 데이터 필드를 복사한 것이므로 에러는 나지 않습니다.
10. 다음 코드의 출력을 구하시오.
#include <iostream>
using namespace std;
struct CDAccount
{
double balance;
double interestRate;
int term;
};
class Circle
{
public:
double radius;
Circle() {
radius = 1;
}
Circle(double newRadius) {
radius = newRadius;
}
double getArea() {
return radius * radius * 3.14159;
}
};
int main() {
CDAccount c1 = { 1000000, 3.5, 12 };
Circle c2;
cout << sizeof(c1) << endl;
cout << sizeof(c2) << endl;
return 0;
}
24
8
11. c언어와 c++을 구분짓는 특징을 세가지 적으시오.
1) 클래스는 객체지향 프로그래밍 기법의 가장 중심 개념으로 c언어와 c++을 구분 짓는 가장 큰 특징입니다.