50문제 중 34문제 정답. 68점
오답정리. 16문제.
[ 파란색 = 내가 체크한 답. 빨간색 = 정답. ]
1. Cpp 함수의 선언 중 오류가 나타나는 것은 무엇인가?
- void Func(auto param):
- void Func(int* param = new int());
- void (*func) (int, int);
- void* Func(const int* const param);
체크답 : 2
매개변수에 동적할당을 한 적이 없어서 고름.
오답. 매개변수로 동적할당을 해도 큰 이상이 없다.
답 : 1
매개변수는 auto 선언을 할 수 없다.
매개변수는 함수저장공간에 저장될 때 데이터가 할당되기 때문에. 형식을 동적으로 지정해줄 수 없다.
정적으로 변수를 지정해주어야 한다.
4. 참조자에 관한 설명 중 올바르지 않은 것은?
- 참조자는 참조하고 있는 객체를 변경하는 것이 가능하다.
- 변수에 또 하나의 별명을 지정해주는 기능이다.
- 선언과 동시에 초기화를 진행해야 한다.
- 변수의 주소를 저장하는 것이 아닌 공간 자체를 참조하는 기능이다.
체크답 : 3
선언과 동시에 초기화를 진행해야 하나, 위 답안에서 답이 없는것 같아 판별하기 힘들었다.
오답. 참조자는 선언과 동시에 초기화를 해야한다.
답 : 1
참조자는 참조하고 있는 객체를 [ 다른 객체로 ] 변경하는 것이 가능하다.
라고 작성해야 문항이 올바르게 인식된다.
객체를 변경하는것 이 A -> B 일때, A -> C로 가리키는 별칭을 바꾸는 것이 안된다는 의미.
10. 깊은 복사와 얕은 복사에 대한 설명으로 올바르지 않은 것은?
- 얕은 복사는 맴버들의 값만을 복사하는 개념이다.
- 깊은 복사는 맴버들의 값 만이 아닌 공간 자체를 복사하는 개념이다.
- 깊은 복사를 작성할 때 모든 공간에 대하여 복사를 하여야 한다.
- 얕은 복사는 값만을 복사하면 되기 때문에 복사대입연산만으로도 충분하다.
체크답 : 4
얕은복사 시, 객체관계에서는 ( class 또는 struct ) 시 얕은복사를 실시할 때. 복사대입연산 만으로는 부족할 수 있다고 판단. 경우에 따라서는 오퍼레이터 또는 객체 내부의 함수를 사용하여 복사하여야 할 수 있다고 생각하였다.
오답. 오퍼레이팅 하는것으로. 기본복사대입연산으로 보는가?
답 : 2
진짜 답 3
깊은 복사는 공간 자체를 복사하는 것 이 아닌 공간을 새로 할당하고. 값을 복사하는 개념이다.
11. this pointer 에 대한 설명으로 옳은 것은?
- 설계도의 주소를 가리키는 포인터 이다.
- 클래스 작성의 함수 정의부에서만 사용이 가능하다.
- 호출된 객체를 기준으로 컴파일러가 this 를 추가한다.
- this pointer 에는 delete 를 사용할 수 없다.
체크답 : 1
설계도의 주소가 객체의 주소로 착각함.
오답. 설계도가 아닌 객체의 주소를 참조하기 때문에, 설계도의 주소 라고 하는 표현은 오답.
답 : 3
주소값은 호출된 객체 기준으로 정해진다.
13. 특수한 개념을 묶어 프로그래밍하는 방법인 일반화를 적용시킨 C++ 의 프로그래밍 기법을 무엇이라 하는 가?
- overload
- override
- template
- class
체크 답 : 4
개념을 묶어, 일반화 적용, 프로그래밍 기법. 을 class로 생각함.
오답. class는 프로그래밍 기법 이 아닌 객체 그 자체라고 봐야한다.
답 : 3
template로 개념을 묶어 일반화 시키고. 코드의 재사용성을 늘리 는 기법이다.
14. 객체지향의 4대 속성 중 하나로 재사용 및 확장에 가장 적합한 속성은 무엇인가?
- 상속성
- 추상화
- 캡슐화
- 다형성
체크 답 : 3
객체간을 묶어 독립적인 객체로 만들어서. 재사용성을 용이하게하고. 객체간의 합일로 확장에 유리하다고 생각.
오답. 캡슐화는 재사용 및 확장 또한 있으나, 보안성과 코드가독성에 더 큰 영향을 미침.
답 : 1
상속성은 하나의 코드를 재사용하고. 확장시킬 때 용이하다. 객체간의 상속으로 부모자식클래스로 구분되는 디자인패턴을 구축하기 용이하다.
15. 객체지향의 4대 속성 중 하나로 Function Overload 와 Override 는 어떤 속성에 해당하는가?
- 상속성
- 추상화
- 캡슐화
- 다형성
체크답 : 1
Overload를 객체의 상속개념으로 생각하였다.
오답. 상속성은 virtual을 기준으로 잡아야한다.
답 : 4
다형성으로 Overload 와 Override로 객체 자체를 인터페이스 화 시켜. 다양한 항목을 직관적으로 생성하고 확장시킬 수 있다.
20. 다음과 같이 C++ 언어를 사용하여 함수를 선언할 때 컴파일 에러가 발생하는 것은?
- void _(int a, int b);
- static int parent(int a = 1, int b = 2);
- double student(int, int);
- int friend(int a, int b);
체크답 : 3
매개변수에 이름을 지정해주지 않으면 컴파일 오류가 나타날것으로 예상.
오답. 컴파일 자체에서는 오류라고 인식하지 않는다.
답 : 4
22. 순수 가상함수에 대한 설명으로 올바른것은?
- 객체지향의 4대 속성 중 상속성에 가장 가까운 기술이다.
- 함수 뒤에 =0; , pure , abstract 를 작성하여 선언한다.
- 순수 가상함수 를 하나 이상 가지고있는 클래스를 인터페이스 라고 한다.
- 파생 클래스에서 재정의하지 않을 시 해당 파생 클래스를 상속받은 파생 클래스에서 정의한다면 문제가 없다.
체크답 : 3
순수 가상함수가 있을 경우, 상속받을 때. 가상함수를 무조건 재선언해주어야 하기 때문에. 인터페이스 라고 생각했음.
오답. 순수 가상함수로만 이루어져 있을 때 인터페이스 라고 한다.
답 : 2
진짜답 1
함수 뒤에 0 과 pure 와 abstract 라고 표시하면. 가상함수 라고 인식한다.
23.Interface 에 대한 설명으로 올바르지 않은 것은?
- __interface 를 작성하여 선언할 수 도 있다.
- 순수 가상함수와 가상 소말자만 가지고 있는 클래스를 의미한다.
- 다중 상속이 불가능하다.
- 인터페이스의 이름은 보통 접두사 I 를 사용한다.
체크답 : 1
__interface 를 작성하여 Interface를 선언해본적이 없어서. 골랐다.
오답. 가능
답 : 3
다중 상속은 당연히 가능하다.
27. 연관 컨테이너에 대한 설명으로 올바르지 않은 것은?
- Key 와 Value 를 쌍으로 가지고 있는 형태이다.
- 자료 탐색이 빠른 것이 장점이다.
- set, Multi Map, map 등이 있다.
- 데이터의 삽입 속도가 빠르다.
체크답 : 1
set은 Key를 value로 쓰기에, Key만 가지고 있다고 생각함.
오답?. Key = value로 보아야 하는가, Key만 존재한다고 보아야 하는가? 쌍으로 가지고 있다고 판단 할 수 있는가?
답 : 4
연관 컨테이너 는 정렬과 중복탐색이 이루어져야 하기 때문에, 삽입속도가 느리다.
30. Iterator 에 대한 설명으로 올바르지 않은 것은?
- 컨테이너의 요소에 접근하기 위해 사용 된다.
- Iterator와 같은 경우 컨테이너에 해당되는 개념이다.
- 요소를 순회할 때 ++, --, +, *, - 연산자를 사용한다.
- 컨테이너와 저장된 데이터의 타입에 상관없이 알고리즘을 사용할 수 있게 해준다.
체크답 : 2
Iterator는, 컨테이너에 해당되는 개념이 아니라 컨테이너에 접근하는 방법이다.
컨테이너에 해당되는 개념. 이라는 설명을 틀리다고 판단하였다.
오답?. 컨테이너에 접근하는 방법을 컨테이너에 해당되는 개념 이라고 판단할 수 있는가?
답 : 4?
컨테이너와 저장된 데이터의 타입에 상관없이 알고리즘을 사용할 수 있게 해준다. 라는 항목이 가장 올바르지 않다. 라고 판단했다. 저장된 데이터타입에 무조건 상관이 없는가? iterator에 요소순환 시 객체의 operator 가 존재하지 않다면, 요소순환이 힘들것이라 판단.
32. 다음 중 상속된 형태의 캐스팅 방법으로 가장 적합한 것은 무엇인가?
- static_cast
- dynamic_cast
- reinterpret_cast
- const_cast
체크답 : 3
reinterpret_cast 가 뭔지 몰라서 찍음.
오답.포인터/참조자 간의 casting으로 메모리 비트패턴을 직접적으로 다른타입으로 강제변환해준다.
답 : 2
dynamic_cast는 다운캐스팅과 업 캐스팅을 수행하는걸 이야기한다.
33. 강제적 형번환을 할 수 있는 캐스팅 연산자는 무엇인가?
- static_cast
- dynamic_cast
- reinterpret_cast
- const_cast
체크답 : 2
dynamic_cast가 dynamic하니까 강제적으로 형변환 한다고 생각.
오답. 맞을리가 없음
답 : 3
강제형변환은 3번이다.
37. 연산자 오버로딩에 대한 설명으로 올바르지 않은 것은?
- 기본 연산자의 기능 의외에 추가적인 기능을 부여하는 것이다.
- new 와 delete는 오버로딩이 불가능하다.
- 작성시 operator를 작성하여야 한다.
- 작성시 반환값과 매개변수 목록이 포함된다.
체크답 : 1
올바른것으로 봤음.
오답. 틀릴리가 없음.
답 : 2
오버로딩이 가능하다. 수업시간에도 해봄
46. 32bit 운영체제에서 다음 코드를 실행했을 경우 변수 TextSize의 값은?
char MyString[] = "12삼45육";
int TextSize = sizeof(MyString);
답 : 12
문자열 에 대한 값에. 한글이 들어가 있음으로 각 문자당 2byte로 생각했음.
오답
문자 '만' 2byte 였음.
답 : 9
숫자 12 = 2byte
문자 삼 = 2byte
숫자 45 = 2byte
문자 육 = 2byte
끝값 '\0'= 1byte
로, 9byte 가 나타남.
47. 다음 프로그램을 실행하면 화면에 출력되는 값은?
#include <iostream>
class NPC
{
public:
int HP = 100;
int Power = 10;
virtual void Attack(NPC& target)
{
target.Attacked(Power);
}
virtual void Attacked(int damage)
{
HP -= damage;
}
};
class Monster : public NPC
{
public:
int Skill = 10;
int Defence = 5;
virtual void Attack(NPC& target)
{
target.Attacked(Power + Skill);
}
virtual void Attacked(int damage)
{
HP -= (damage - Defence);
}
};
int main()
{
NPC npc;
Monster monster;
npc.Attack(monster);
monster.Attack(npc);
std::cout << npc.HP << monster.HP;
return 0;
}
체크답 : 9085
연산실수함. 몬스터 HP와 npc HP의 순서를 햇갈림.
오답.
답 : 8095
연산순서 상.
npc.Attack이 이루어지면, target의 Attacked(this->Power) 이기 때문에, monster의 Attacked 가 실행되어.
monster의 HP -= npc.damage - monster.Defence 가 된다.
즉, monster 의 HP가 5만큼 깍임.
monster.HP = 95
monster.Attack(npc)가 이루어지면,
Monster.Attack이 이루어지면, target의 Atacked(this -> Power + this -> Skill) 이기 때문에, 상속받은 Power 10과 Skill 10 이 더해져, 20이 넘어감.
npc의HP -= monster.Power + monster.Skill 이 된다.
npc.HP = 80
그럼으로, 8095 가 맞음.
48. 다음 프로그램을 실행하면 화면에 출력되는 값은?
#include <iostream>
int main()
{
int arr[] = { 0, 2, 4, 8 };
int* p;
p = arr;
std::cout << (*p)++;
std::cout << *(p++);
std::cout << p[1];
return 0;
}
체크탑 : 124
증감연산의 연산순서를 고려하지 않음.
오답.
답 : 014
첫번째 출력
*p = 배열 p 의 첫번째 값. 0
0을 넘긴 후 1을 더해준다.
그럼으로 출력값은 0
두번째 출력
*(p++)
임으로, *p에 해당하는 값을 도출 후 넘겨준 다음 p에 ++해준다.
첫번째 출력에서 1을 더해주었음으로
출력값은 1
세번째 출력
p[1] 번째 값을 출력해야한다.
두번째 출력에서 p에 1을 더해주었음 으로, p = 1 두번째 값을 가리킨다.
여기서, p[1]임으로. p에서 1번 더 넘긴 값을 출력해야한다.
출력값은 4
그래서 014
50. 다음 프로그램을 실행하면 화면에 출력되는 값은?
#include <iostream>
int Func(int& a, int* b)
{
a += 1;
b += 1;
return a + *b;
}
int main()
{
int x = 1;
int y[] = { 1, 2, 3, 4, 5 };
int z = Func(x, y);
std::cout << x << *y << z;
return 0;
}
체크답 : 124
오답.
답 : 214
첫번째 출력
x = 1 이다. 그러나, 받아온 값이 원본값 임으로 Func에서 중첩연산을 하였기에 출력시 에는 x +=1 이 되어, 2가 된다.
출력 : 2
두번째 출력.
y = 배열로, 첫번째 값은 1 이다. Func에서 y에 +=1을 하더라도, 원본값 이 아닌, 함수내부값으로 받아오기에, 복사되어 가져온다. 그래서. main문 안의 y는 변동이 없다.
출력 1
세번째 출력.
z = Func의 반환값으로, a의 +1된 2, y의 +1된 2 가 더해져. 4가 된다.
출력 4
그래서 214가 나타난다.
'서울게임아카데미 교육과정 6개월 C++ ~ DirectX2D' 카테고리의 다른 글
43일차. 오답정리 확인 (0) | 2023.06.13 |
---|---|
42일차. 오답정리 확인 (0) | 2023.06.09 |
40일차. 03.template_and_none_type_parameters, 04.function_template_specialzation, 05.class_template_specialzation, 06.partial_specialization, 07.Pointer_template_specialization. (0) | 2023.06.02 |
39일차 Template 01_function_template, 02_class_template (0) | 2023.05.31 |
38일차 01_STL (0) | 2023.05.28 |