1. 복사생성자란?
2.복사생성자의 형태를 쓰시오.
3.깊은 복사와 얕은 복사의 차이점에 대해서 쓰시오.
4.변환생성자란?
5.허용되는 변환에 대해 설명하시오.
6.public 속성의 show()멤버 함수를 가지고 있는 클래스 Sample의 객체 a가 선언되어 있다고 가정한다. 다음 중 틀린 구문을 고르시오.
①Sample &p = *a; ②Sample *q = &a; ③Sample r = a; ④Sample &s = a;
7. 클래스 Sample 타입의 매개변수를 갖는 다음 함수 f()에 대한 설명으로 틀린 것은?
void f(Sample a);
①함수 f()를 호출되면 객체 a가 생성된다
②함수 f()를 호출되면 객체 a의 생성자가 실행된다.
③함수 f()가 종료되면 객체 a의 소멸자가 실행된다.
④함수 f()가 호출되면 ‘값에 의한 호출’이 일어난다.
8. 다음 함수에 대한 호출이 바른 것은?
void f(int &a, int b);
int m = 3, n = 2;
① f(m, 2); ② f(&m, n); ③ f(*m, 2); ④ f(2,m);
9. 다음 함수들에 대해 문제에서 주어진 함수의 실행결과 n 값은 얼마인가?
void f(int a) {a = -a;}
void g(int *a) {*a = -*a;}
void h(int &a) {a = -a;}
int n = 5;
① f(n);
② g(&n);
③ h(n);
10. 다음 코드에 대해 아래 문제가 순서대로 실행될 때 배열 ar은 어떻게 변하는가?
int ar[] = {0 ,1, 3, 5, 7};
int& f(int n) {
return ar[n];
}
① f(0) = 100;
② f(0) = f(1) + f(2) + f(3) + f(4)
③ int& v = f(2); v++;
11. 다음 클래스에서 컴파일러가 삽입하는 디폴트 복사 생성자는 무엇인지 쓰시오
class Student {
string name;
string id;
double grade;
};
12. 다음과 같이 선언된 정수를 저장하는 스택 클래스 MyIntStack을 구현하시오. (MyIntStack.cpp를 완성하시오.)MyIntStack 스택에 저장할 수 있는 정수의 최대 개수는 10개이다.
클래스의 선언부인 MyIntStack.h는 아래와 같다.
class MyIntStack {
int p[10];
int top;
public:
MyIntStack();
bool push(int n);
bool pop(int& n);
};
MyIntStack 클래스를 활용하는 코드와 실행결과는 아래와 같다.
int main() {
MyIntStack a;
for(int x = 0; x < 11 ; x++) {
if(a.push(x)) cout << x << ‘ ’;
else cout << endl << x + 1 << “번째 stack full” << endl;
}
int n;
for(int x = 0; x < 11 ; x++){
if(a.pop(n)) cout << n << ‘ ’;
else cout << endl << x + 1 << “번째 stack empty”;
}
cout << endl;
}
결과)
0 1 2 3 4 5 6 7 8 9
11번째 stack full
9 8 7 6 5 4 3 2 1 0
11번째 stack empty
13. 책의 이름과 가격을 저장하는 다음 Book 클래스에 대해 물음에 답하시오.
class Book {
char* title;
int price;
public:
Book(char* title, int price);
~Book();
void set(char* title, int price);
void show() {cout << title << ‘ ’ << price <<“원” << endl;}
};
① Book클래스의 생성자, 소멸자,set 함수가 구현된 소스파일을 완성하시오.
② 컴파일러가 삽입하는 디폴트 복사 생성자 코드는 무엇인가?
③ 디폴트 복사 생성자만 있을 때 아래 main() 함수는 오류가 발생된다. 오류가 발생되지 않도록 깊은 복사 생성자를 작성하라.
int main()
{
Book cpp(“컴퓨터시스템과”, 1000);
Book java = cpp;
java.set(“컴퓨터정보과”, 1500);
cpp.show();
java.show();
}
14. 연산자 함수란?
15. 연산자 함수의 선언형태를 쓰시오.
16. 다음 중 연산자 중복이 불가능한 것은?
① new ② ++ ③ ** ④ [ ]
17. Money 클래스의 두 객체를 더하여 합한 결과를 Money 객체로 리턴하고자 한다. + 연산자를 Money 클래스의 멤버함수로 선언할 때 + 연산자 함수의 원형은 무엇인지 쓰시오.
class Money {
//+연산자 함수의 원형만 쓰시오.
};
18. 프렌드 함수란 무엇인가?
19. 프렌드 함수를 선언할 수 있는 경우 3가지를 쓰시오.
20. 클래스 SampleManager에는 다음과 같음 멤버함수가 있다.
bool compare(Sampe &a, Sample &b);
이 멤버함수를 다음 클래스 Sample에 프렌드로 초대하도록 선언하라.
class Sample {
...
};
21. 다음 프로그램은 컴파일 오류가 발생한다. 오류의 원인은 무엇인가? 오류를 바람직하게 수정하시오.
class Student {
int id;
public:
Student(int id) { this->id = id;}
};
bool isValid(Student s) {
if(s.id > 0) return true;
else return false;
}
22. 아래와 같은 Book 클래스가 있다고 할 때 main()함수에서 Book 객체에 대한 아래 연산을 하고자 한다. +=, -=연산자 함수를 Book 클래스의 멤버함수로 구현하시오.
class Book {
string title;
int price, pages;
public:
Book(string title = “”, int price = 0, int pages = 0){
this->title = title;this->price = price; this->pages = pages;
}
void show() {
cout << title << ‘ ’ << price << “원 ” << pages << “ 페이지” << endl;
}
string getTitle() { return title;}
};
int main() {
Book a(“초한지”, 20000, 300), b(“삼국지”,30000,500);
a += 500;
b -= 500;
a.show();
b.show();
}
결과)
초한지 20500원 300 페이지
삼국지 29500원 500 페이지
23. 2차원 행렬을 추상화한 Matrix 클래스를 작성하고 show() 멤버함수와 다음 연상이 가능하도록 연산자를 모두 구현하시오.
Matrix a(1,2,3,4) , b(2,3,4,5), c;
c = a + b;
a += b;
a.show();
b.show();
c.show();
if(a == c)
cout << “a and c are the same” << endl;
결과)
Matrix = { 3 5 7 9 }
Matrix = { 2 3 4 5 }
Matrix = { 3 5 7 9 }
a and c are the same
24. 상속의 기본문법을 쓰시오.
25. 파생 클래스의 객체가 생성될 때 파생 클래스의 생성자와 기본 클래스의 생성자가 모두 실행되는가? 아니면 파생 클래스의 생성자만 실행되는가?
26. 파생 클래스의 생성자와 기본 클래스의 생성자 중에서 어떤 생성자가 먼저 실행되는가?
27. 다음 클래스 A, B, C에 대해 물음에 답하시오.
class A {
int x;
public:
A() { x = 0;}
A(int x) {this->x = x;}
};
class B : public A {
int y;
public:
B(int x, int y) : A(x + 5) {this->y = y;}
};
class C : public B{
int m;
public:
C(int x, int y, int z) : B(x, y) { m = x*y*z;}
};
다음의 객체 생성 코드가 실행되면 객체내의 멤버변수 x, y, m의 값은 얼마인가?
① C c(3,5,2);
② B b(3,4);
28. C++ 상속 특징 중 틀린 것은?
① C++에서는 다중 상속을 허용하지만 다중 상속으로 문제가 발생하는 경우도 있다
② C++에서는 상속의 횟수에 제한이 없다.
③ protected 멤버는 클래스 내에서 보호 받기 때문에 상속되지 않는다.
④ 상속의 가장 큰 장점은 소프트웨어 재사용에 있다.
29. 파생 클래스의 객체가 생성되거나 소멸될 때에 관한 설명 중 틀린 것은?
① 파생 클래스 객체 생성시 파생 클래스와 기본 클래스의 생성자가 모두 실행된다.
② 개발자는 파생 클래스의 생성자가 실행될 때 함께 실행될 기본 클래스의 생성자를 선택할 수 있다.
③ 파생 클래스 객체 소멸 시, 기본 클래스의 소멸자가 먼저 실행되고 파생 클래스의 소멸자는 나중에 실행된다.
④ 파생 클래스의 생성자가 실행될 때 함께 실행할 기본 클래스의 생성자를 찾는 과정은 실행 시간이 아닌 컴파일 시에 이루어진다.
30. 다음 클래스 Rocket과 Computer를 동시에 상속받는 클래스 Satellite을 선언하시오.
class Rocket { ... }
class Computer { ... }
31. 다음 클래스가 있을 때 물음에 답하라.
class Pen { ... }
class Eraser { ... }
class Lock { ... }
① 클래스 Pen과 클래스 Eraser를 동시에 상속받는 클래스 HiPen을 선언하시오.
② 클래스 Pen, Eraser, Lock를 동시에 상속받는 OminPen을 선언하시오.
32. 2차원 상의 한점을 표현하는 Point 클래스가 있다. Point 클래스를 상속받은 ColorPoint 클래스를 작성하고 main() 함수를 참고하여 전체 프로그램을 완성하시오.
class Point {
int x, y;
public:
Point(int x, int y) {this->x = x; this->y = y;}
int getX() { return x; }
int getY() { return y; }
protected:
void move(int x, int y) {this->x = x; this->y = y;}
};
int main() {
ColorPoint cp(5, 5, “RED”);
cp.show();
cp.setPoint(10, 20);
cp.setColor(“BLUE”);
cp.show();
}
결과)
RED색으로 (5,5)에 위치한 점입니다.
BLUE색으로 (10, 20)에 위치한 점입니다.
33. 호출하는 함수의 결정을 실행 시간에 하도록 컴파일러에게 지시하는 키워드는?
① static ② virtual ③ public ④ extern
34. 기본 클래스의 가상함수와 동일한 타입의 함수를 파생 클래스에서 재정의하는 것을 무엇이라고 하는가?
35. 가상함수의 선언 형태를 쓰시오.
36. 다음은 단위를 변환하는 추상 클래스 Converter 이다. 이 Converter 클래스를 상속받아 km를 mile(마일)로 변환하는 KmToMile 클래스를 작성하시오. 1마일은 1.609344km이다.
class Converter {
protected:
double ratio;
virtual double convert(double src) = 0;
virtual string getSourceString() = 0;
virtual string getDestString() = 0;
public:
Converter(double ratio) { this->ratio = ratio; }
void run() {
double src;
cout << getSourceString() <<“을” << getDestString() << “로 바꿉니다.”;
cout << getSourceString() << “을 입력하세요 >> ” ;
cin >> src;
cout << “변환 결과 : ” << convert(src) << getDestString() << endl;
}
};
int main() {
KmToMile tiMile(1.609344);
tiMile.run();
}
매일로보네드렷읍니다
뭔메일? 어디에?
많다많아 - dc App
풀어드렸습니다
차라리 대신 살아달라고 해라 - return 0;
씨발롬아 몇개는 검색만해도 풀수잇는건데
어휴 학교 과제 니가 좀 처해라 지식인에다가 물어보더니 이젠 디씨노 ㅅㅂ