top 70 c interview questions
경험이 풍부한 전문가뿐만 아니라 초급 지원자 용 코드 예제와 함께 가장 자주 묻는 기본 및 고급 C ++ 인터뷰 질문 :
이 자세한 기사는 C ++ 인터뷰를 준비하는 사람들을위한 책갈피가 될 것입니다.
여기에서는 표준 템플릿 라이브러리 (STL) 등과 같은 고급 주제에 대한 몇 가지 기본 질문과 함께 C ++의 거의 모든 주요 주제를 다룹니다.
이 C ++ 코딩 질문 세트는 모든 C ++ 인터뷰를 자신있게 직면하고 첫 번째 시도에서 성공적으로 해결하는 데 도움이됩니다.
학습 내용 :
코드 예제가 포함 된 C ++ 인터뷰 질문
다음은 C ++ 전문가가 답변하는 가장 인기있는 C ++ 프로그래밍 인터뷰 질문입니다.
또한 읽기 => 최고 C 프로그래밍 인터뷰 질문
기본 C ++
C ++ 프로그램의 구조
Q # 1) C ++ 프로그램의 기본 구조는 무엇입니까?
대답: C ++ 프로그램의 기본 구조는 다음과 같습니다.
#include int main() { cout<<”Hello,World!”; return 0; }
'로 시작하는 첫 번째 줄 # ”는 전 처리기 지시문 . 이 경우 우리는 포함 컴파일러에게 헤더를 포함하도록 지시하는 지시어로 ' iostream.h ”는 프로그램의 뒷부분에서 기본 입 / 출력에 사용됩니다.
다음 줄은 정수를 반환하는 'main'함수입니다. 주 함수는 모든 C ++ 프로그램의 실행 시작점입니다. 소스 코드 파일에서의 위치에 관계없이 주 함수의 내용은 항상 C ++ 컴파일러에 의해 먼저 실행됩니다.
다음 줄에서는 코드 블록의 시작을 나타내는 여는 중괄호를 볼 수 있습니다. 그런 다음 표준 출력 스트림 인 카운트를 사용하는 프로그래밍 명령 또는 코드 줄이 표시됩니다 (해당 정의는 iostream.h에 있음).
이 출력 스트림은 문자열을 받아서 표준 출력 장치로 인쇄합니다. 이 경우“Hello, World!”입니다. 각 C ++ 명령어는 세미콜론 (;)으로 끝나므로 매우 필요하며 생략하면 컴파일 오류가 발생합니다.
중괄호}를 닫기 전에 'return 0;'이라는 또 다른 줄이 표시됩니다. 이것은 주요 기능으로의 복귀 지점입니다.
모든 C ++ 프로그램은 위와 같이 전 처리기 지시문, 주 함수 선언 뒤에 코드 블록, 그리고 프로그램의 성공적인 실행을 나타내는 주 함수에 대한 반환 지점이있는 기본 구조를 갖습니다.
Q # 2) C ++의 주석은 무엇입니까?
대답: C ++의 주석은 컴파일러에서 무시되는 소스 코드의 일부입니다. 프로그래머가 소스 코드에 대한 설명이나 추가 정보를 추가하는 데만 유용합니다.
C ++에서는 두 가지 방법으로 주석을 추가 할 수 있습니다.
- // 한 줄 주석
- / * 블록 주석 * /
첫 번째 유형은 컴파일러가 '//'를 만나면 모든 것을 버립니다. 두 번째 유형에서 컴파일러는 '/ *'와 '* /'사이의 모든 것을 버립니다.
변수, 데이터 유형 및 상수
Q # 3) 변수 선언과 정의의 차이.
대답: 변수 선언은 단순히 변수의 데이터 유형과 변수 이름을 지정하는 것입니다. 선언의 결과로 지정된 데이터 유형에 따라 메모리의 변수 공간을 예약하도록 컴파일러에 지시합니다.
예:
int Result; char c; int a,b,c;
위의 모든 것은 유효한 선언입니다. 또한 선언의 결과로 변수 값이 결정되지 않습니다.
반면에 정의는 선언 된 변수의 구현 / 인스턴스로, 링커가 적절한 엔티티에 대한 참조를 연결할 수 있도록 선언 된 변수에 적절한 값을 연결합니다.
위의 예에서 ,
결과 = 10;
C =‘A’;
이것은 유효한 정의입니다.
Q # 4) 변수의 로컬 및 글로벌 범위에 대한 설명.
대답: 변수의 범위는 변수가 활성 상태로 유지되는 프로그램 코드의 범위로 정의됩니다. 즉, 선언, 정의 또는 작업 할 수 있습니다.
C ++에는 두 가지 유형의 범위가 있습니다.
- 지역 범위 : 변수는 로컬 범위를 갖거나 코드 블록 내에서 선언 될 때 로컬이라고합니다. 변수는 블록 내부에서만 활성 상태로 유지되며 코드 블록 외부에서는 액세스 할 수 없습니다.
- 글로벌 범위 : 변수는 프로그램 전체에서 액세스 할 수있는 경우 전역 범위를 갖습니다. 전역 변수는 모든 함수 정의 이전에 프로그램 위에 선언됩니다.
예:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
Q # 5) 프로그램에 같은 이름의 글로벌 변수와 로컬 변수가있을 때 우선 순위는 무엇입니까?
대답: 전역 변수와 이름이 같은 지역 변수가있을 때마다 컴파일러는 지역 변수에 우선 순위를 부여합니다.
예:
#include int globalVar = 2; int main() { int globalVar = 5; cout<위 코드의 출력은 5입니다. 이는 두 변수의 이름이 같지만 컴파일러가 로컬 범위를 선호하기 때문입니다.
Q # 6) 같은 이름의 글로벌 변수와 로컬 변수가있을 때 글로벌 변수에 어떻게 접근합니까?
대답: 이름은 같지만 범위가 다른 두 개의 변수가있는 경우, 즉 하나는 지역 변수이고 다른 하나는 전역 변수 인 경우 컴파일러는 지역 변수를 우선으로합니다.
전역 변수에 액세스하기 위해 ' 범위 확인 연산자 (: :) ”. 이 연산자를 사용하여 전역 변수의 값에 액세스 할 수 있습니다.
예:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< 산출:
글로벌 변수 x = 10
지역 변수 x = 2
Q # 7) 상수로 int를 초기화하는 방법은 몇 가지입니까?
대답: 두 가지 방법이 있습니다.
- 첫 번째 형식은 전통적인 C 표기법을 사용합니다.
int 결과 = 10; - 두 번째 형식은 생성자 표기법을 사용합니다.
int 결과 (10);
상수
Q # 8) 상수 란 무엇입니까? 예를 들어 설명하십시오.
대답: 상수는 고정 된 값을 가진 표현식입니다. 데이터 유형에 따라 정수, 10 진수, 부동 소수점, 문자 또는 문자열 상수로 나눌 수 있습니다.
10 진수 외에도 C ++는 두 개의 상수, 즉 8 진수 (8 진수) 및 16 진수 (16 진수) 상수도 지원합니다.
상수의 예 :
- 75 // 정수 (10 진수)
- 0113 // 8 진수
- 0x4b // 16 진수
- 3.142 // 부동 소수점
- ‘c’// 문자 상수
- 'Hello, World'// 문자열 상수
노트 : 단일 문자를 나타내야 할 때는 작은 따옴표를 사용하고 둘 이상의 문자로 상수를 정의하려면 큰 따옴표를 사용합니다.
Q # 9) C ++에서 상수를 어떻게 정의 / 선언합니까?
대답: C ++에서는 다음을 사용하여 자체 상수를 정의 할 수 있습니다. #밝히다 전 처리기 지시문.
#define 식별자 값
예:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< 산출: 원의 면적 = 78.55
위의 예에서 볼 수 있듯이 #define 지시문을 사용하여 상수를 정의하면 프로그램 전체에서 상수를 사용하고 값을 대체 할 수 있습니다.
C ++에서“ const ”키워드. 이 방법은 변수를 선언하는 방법과 비슷하지만 const 접두사가 있습니다.
상수 선언의 예
const int pi = 3.142;
const char c = 'sth';
const 우편 번호 = 411014;
위의 예에서 상수 유형이 지정되지 않을 때마다 C ++ 컴파일러는 정수 유형으로 기본값을 설정합니다.
연산자
Q # 10) C ++의 할당 연산자에 대한 설명.
대답: C ++의 할당 연산자는 다른 변수에 값을 할당하는 데 사용됩니다.
a = 5;
이 코드 줄은 정수 값을 할당합니다. 5 변수에 ...에 .
= 연산자의 왼쪽에있는 부분은 lvalue (왼쪽 값) 및 오른쪽 rvalue (올바른 값). 엘 값 항상 변수 여야하지만 오른쪽은 상수, 변수, 연산 결과 또는 이들의 조합 일 수 있습니다.
할당 작업은 항상 오른쪽에서 왼쪽으로 발생하며 역으로 발생하지 않습니다.
C ++가 다른 프로그래밍 언어에 비해 갖는 한 가지 속성은 할당 연산자를 rvalue (또는 rvalue ).
예:
a = 2 + (b = 5);
다음과 같습니다.
b = 5;
a = 2 + b;
즉, 먼저 할당 5 변수에 비 다음 할당 에, 가치 두 더하기 이전 표현의 결과 비 (즉 5), 잎 ...에 최종 값으로 7 .
따라서 다음 표현식은 C ++에서도 유효합니다.
a = b = c = 5;
변수에 5를 할당 ...에 , 비 과 씨 .
Q # 11) 같음 (==)과 할당 연산자 (=)의 차이점은 무엇입니까?
대답: C ++에서 같음 (==) 및 할당 연산자 (=)는 완전히 다른 두 연산자입니다.
같음 (==)은 두 식을 평가하여 같은지 확인하고 같으면 true를 반환하고 같지 않으면 false를 반환하는 같음 관계 연산자입니다.
할당 연산자 (=)는 변수에 값을 할당하는 데 사용됩니다. 따라서 평가를 위해 등식 관계 연산자 내부에 복잡한 할당 연산을 할 수 있습니다.
Q # 12) C ++의 다양한 산술 연산자는 무엇입니까?
답변 : C ++는 다음 산술 연산자를 지원합니다.
- + 추가
- – 빼기
- * 곱셈
- / 부문
- % 모듈
다음 코드를 사용하여 다양한 산술 연산자를 시연 해 보겠습니다.
예:
#include int main () { int a=5, b=3; cout<<”a + b = “< 산출 :
a + b = 8
a – b = 2
a * b = 15
a / b = 2
a % b = 1
위에 표시된대로 다른 모든 연산은 매우 다른 모듈로 연산자를 제외하고는 실제 산술 연산과 간단하고 동일합니다. 모듈로 연산자는 a와 b를 나누고 연산의 결과는 나눗셈의 나머지입니다.
Q # 13) C ++의 다양한 복합 할당 연산자는 무엇입니까?
대답: 다음은 C ++의 복합 할당 연산자입니다.
+ =,-=, * =, / =, % =, >> =,<<=, &=, ^=,|=
복합 할당 연산자는 기본 연산자 중 하나를 사용하여 변수 값을 변경할 수있는 C ++ 언어의 가장 중요한 기능 중 하나입니다.
예:
value += increase; is equivalent to value = value + increase; if base_salary is a variable of type int. int base_salary = 1000; base_salary += 1000; #base_salary = base_salary + 1000 base_salary *= 5; #base_salary = base_salary * 5;
Q # 14) 사전 및 사후 증가 / 감소 작업의 차이점을 설명합니다.
대답: C ++에서는 두 개의 연산자, 즉 ++ (증가) 및 – (감소)를 허용하여 기존 변수 값에 1을 더하고 변수에서 1을 각각 뺄 수 있습니다. 이러한 연산자를 차례로 증가 (++) 및 감소 (-)라고합니다.
예:
a = 5;
++;
두 번째 문인 a ++는 a의 값에 1이 더해 지도록합니다. 따라서 a ++는
a = a + 1; 또는
a + = 1;
이러한 연산자의 고유 한 기능은 이러한 연산자에 변수를 접두사 또는 접미사로 지정할 수 있다는 것입니다. 따라서 a가 변수이고 증분 연산자 앞에 접두사를 붙이면
++ a;
이를 사전 증가라고합니다. 마찬가지로 사전 감소도 있습니다.
변수 a 앞에 증분 연산자를 붙이면 다음과 같이됩니다.
++;
이것은 사후 증분입니다. 마찬가지로 사후 감소도 있습니다.
사전과 사후의 의미의 차이는 표현식이 평가되고 결과가 저장되는 방식에 따라 다릅니다.
사전 증가 / 감소 연산자의 경우 증가 / 감소 연산이 먼저 수행 된 다음 결과가 lvalue에 전달됩니다. 사후 증가 / 감소 작업의 경우 lvalue가 먼저 평가 된 다음 그에 따라 증가 / 감소가 수행됩니다.
예:
a = 5; b = 6;
++ a; # a = 6
비-; # b = 6
-ㅏ; # a = 5
b ++; # 6
콘솔을 통한 I / O
Q # 15) C ++에서 추출 및 삽입 연산자는 무엇입니까? 예를 들어 설명하십시오.
대답: C ++의 iostream.h 라이브러리에서 중국 , 및 비용 입력 및 출력에 각각 사용되는 두 개의 데이터 스트림입니다. Cout은 일반적으로 화면으로 지정되고 cin은 키보드에 지정됩니다.
'cin'(추출 연산자) : cin 스트림과 함께 오버로드 된 연산자 >>를 사용하여 C ++는 표준 입력을 처리합니다.
int age; cin>>age;
위의 예와 같이 정수 변수 'age'를 선언 한 후 cin (키보드)이 데이터를 입력 할 때까지 기다립니다. “cin”은 RETURN 키를 눌렀을 때만 입력을 처리합니다.
'cout'(삽입 연산자) : 이것은 과부하와 함께 사용됩니다.<< operator. It directs the data that followed it into the cout stream.
예:
누군가를 감시하기위한 최고의 앱
cout<<”Hello, World!”; cout<<123;
제어 구조 및 기능
제어 구조 및 루프
Q # 16) while 루프와 do while 루프의 차이점은 무엇입니까? 예를 들어 설명하십시오.
대답: C ++에서 while 루프의 형식은 다음과 같습니다.
While (표현식)
{문;}
while 아래의 명령문 블록은 주어진 표현식의 조건이 참이면 실행됩니다.
예:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<위의 코드에서 n이 0이면 루프가 직접 종료됩니다. 따라서 while 루프에서 종료 조건은 루프의 시작 부분에 있으며 충족되면 루프의 반복이 실행되지 않습니다.
다음으로 do-while 루프를 고려합니다.
do-while의 일반적인 형식은 다음과 같습니다.
do {statement;} while (condition);
예:
#include int main() { int n; cout<>n; do { cout<위의 코드에서 루프 조건이 끝날 때 루프 내부의 문이 적어도 한 번 실행되는 것을 볼 수 있습니다. 이것들은 while과 do-while의 주요 차이점입니다.
while 루프의 경우 조건이 충족되지 않으면 루프를 처음에 직접 종료 할 수 있지만 do-while 루프에서는 루프 문을 한 번 이상 실행합니다.
기능
Q # 17) 'void'반환 유형이란 무엇을 의미합니까?
대답: 모든 함수는 일반 구문에 따라 값을 반환해야합니다.
하지만 함수가 어떤 값도 반환하지 않도록하려면 ' 빈 ”를 표시합니다. 이것은 우리가 ' 빈 ”는 함수에 반환 값이 없음을 나타내거나“ 빈 ”.
예:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
Q # 18) 가치에 의한 통과와 참조에 의한 통과를 설명하십시오.
대답: '값별 전달'을 사용하여 매개 변수를 함수에 전달하는 동안 매개 변수 사본을 함수에 전달합니다.
따라서 호출 된 함수의 매개 변수에 대한 수정 사항은 호출 함수로 다시 전달되지 않습니다. 따라서 호출 함수의 변수는 변경되지 않습니다.
예:
void printFunc(int a,int b,int c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< 산출:
x = 1
y = 3
z = 4
위에서 볼 수 있듯이 호출 된 함수에서 매개 변수가 변경되었지만 해당 값은 값으로 전달되어 호출 함수에 반영되지 않았습니다.
그러나 함수에서 변경된 값을 호출 함수로 다시 가져 오려면 '참조로 전달'기술을 사용합니다.
이를 증명하기 위해 위 프로그램을 다음과 같이 수정합니다.
void printFunc(int& a,int& b,int& c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< 산출:
x = 2
y = 6
z = 8
위와 같이 '참조로 전달'기술을 사용하면 호출 된 함수의 매개 변수에 대한 수정 사항이 호출 함수로 전달됩니다. 이는이 기술을 사용하여 매개 변수의 사본을 전달하지 않고 실제로 변수의 참조 자체를 전달하기 때문입니다.
Q # 19) 기본 매개 변수는 무엇입니까? C ++ 함수에서 어떻게 평가됩니까?
대답: 기본 매개 변수는 함수를 선언하는 동안 각 매개 변수에 할당되는 값입니다.
이 값은 함수를 호출하는 동안 해당 매개 변수가 비어있는 경우에 사용됩니다. 특정 매개 변수에 대한 기본값을 지정하려면 함수 선언에서 매개 변수에 값을 할당하기 만하면됩니다.
함수 호출 중에이 매개 변수에 대한 값이 전달되지 않으면 컴파일러는 제공된 기본값을 사용합니다. 값이 지정되면이 기본값이 적용되고 전달 된 값이 사용됩니다.
예:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< 산출:
12
6
위의 코드에서 볼 수 있듯이 곱하기 함수에는 두 번의 호출이 있습니다. 첫 번째 호출에서는 하나의 매개 변수 만 값과 함께 전달됩니다. 이 경우 두 번째 매개 변수는 제공된 기본값입니다. 그러나 두 번째 호출에서는 두 매개 변수 값이 모두 전달되므로 기본값이 무시되고 전달 된 값이 사용됩니다.
Mac 용 MP4 변환기 무료 YouTube
Q # 20) C ++에서 인라인 함수는 무엇입니까?
대답: 인라인 함수는 함수를 호출하는 지점으로 컴파일러에 의해 컴파일되고 해당 지점에서 코드가 대체되는 함수입니다. 이렇게하면 컴파일이 더 빨라집니다. 이 함수는 함수 프로토 타입 앞에 'inline'키워드를 붙여 정의합니다.
이러한 함수는 인라인 함수의 코드가 작고 간단한 경우에만 유리합니다. 함수는 인라인으로 정의되지만 인라인으로 평가할지 여부는 완전히 컴파일러에 따라 다릅니다.
고급 데이터 구조
배열
Q # 21) 배열이 일반적으로 for 루프로 처리되는 이유는 무엇입니까?
대답: Array는 인덱스를 사용하여 각 요소를 순회합니다.
A가 배열이면 각 요소는 A [i]로 액세스됩니다. 프로그래밍 방식으로 이것이 작동하는 데 필요한 것은 0에서 A.length-1까지 증가하는 인덱스 (카운터) 역할을하는 루프 변수 i가있는 반복 블록입니다.
이것이 바로 루프가하는 일이며 for 루프를 사용하여 배열을 처리하는 이유입니다.
문 # 22) delete와 delete []의 차이점을 설명합니다.
대답: “delete []”는 new []를 사용하여 할당 된 배열에 할당 된 메모리를 해제하는 데 사용됩니다. '삭제'는 new를 사용하여 할당 된 메모리 청크를 해제하는 데 사용됩니다.
Q # 23)이 코드에 어떤 문제가 있습니까?
T * p = 새로운 T [10];
p 삭제;
대답: 위의 코드는 구문 상 정확하고 잘 컴파일됩니다.
유일한 문제는 배열의 첫 번째 요소 만 삭제한다는 것입니다. 전체 배열이 삭제 되더라도 첫 번째 요소의 소멸자 만 호출되고 첫 번째 요소의 메모리가 해제됩니다.
Q # 24) 배열의 객체가 파괴되는 순서는 무엇입니까?
대답: 배열의 객체는 생성의 역순으로 소멸됩니다 : 처음 생성 된 후 마지막으로 소멸됩니다.
다음 예에서, 소멸자의 순서는 a [9], a [8],…, a [1], a [0]입니다.
voiduserCode() { Car a[10]; ... }
포인터
Q # 25)이 코드에 어떤 문제가 있습니까?
T * p = 0;
p 삭제;
대답: 위 코드에서 포인터는 널 포인터입니다. C ++ 03 표준에 따라 NULL 포인터에서 delete를 호출하는 것은 완벽하게 유효합니다. 삭제 연산자는 내부적으로 NULL 검사를 처리합니다.
Q # 26) C ++에서 참조 변수는 무엇입니까?
대답: 참조 변수는 기존 변수의 별칭입니다. 이것은 변수 이름과 참조 변수가 동일한 메모리 위치를 가리킴을 의미합니다. 따라서 변수가 업데이트 될 때마다 참조도 업데이트됩니다.
예:
int a=10; int& b = a;
여기서 b는 a의 참조입니다.
스토리지 클래스
Q # 27) 스토리지 클래스 란 무엇입니까? C ++에서 스토리지 클래스를 언급합니다.
대답: 스토리지 클래스는 변수 또는 함수와 같은 기호의 수명 또는 범위를 결정합니다.
C ++는 다음 스토리지 클래스를 지원합니다.
- 자동
- 공전
- 외부
- 레지스터
- 변하기 쉬운
Q # 28) Mutable Storage 클래스 지정자를 설명하십시오.
대답: 상수 클래스 개체 멤버의 변수는 변경할 수 없습니다. 그러나 변수를 '변경 가능'으로 선언하여 이러한 변수의 값을 변경할 수 있습니다.
Q # 29) auto라는 키워드는 무엇입니까?
대답: 기본적으로 함수의 모든 지역 변수는 자동입니다. 자동 . 아래 함수에서 변수‘i’와‘j’는 모두 자동 변수입니다.
void f() { int i; auto int j; }
노트 : 글로벌 변수는 자동 변수가 아닙니다.
Q # 30) 정적 변수 란 무엇입니까?
대답: 정적 변수는 함수 호출에서 값을 유지하는 지역 변수입니다. 정적 변수는 'static'키워드를 사용하여 선언됩니다. 정적 숫자 변수는 기본값이 0입니다.
다음 함수는 세 번 호출되면 1 2 3을 인쇄합니다.
void f() { static int i; ++i; printf(“%d “,i); }
전역 변수가 정적 인 경우 가시성은 동일한 소스 코드로 제한됩니다.
Q # 31) Extern Storage Specifier의 목적은 무엇입니까?
대답: 'Extern'지정자는 전역 기호의 범위를 확인하는 데 사용됩니다.
#include using nam espace std; main() { extern int i; cout< 위 코드에서 'i'는 정의 된 파일 외부에서 볼 수 있습니다.
Q # 32) 레지스터 스토리지 지정자를 설명하십시오.
대답: “Register”변수는 변수를 사용할 때마다 사용해야합니다. 변수가 '레지스터'지정자로 선언되면 컴파일러는 해당 저장소에 대한 CPU 레지스터를 제공하여 변수 검색 속도를 높입니다.
Q # 33) 함수에서 'const'참조 인수를 언제 사용해야합니까?
대답: 함수에서 'const'참조 인수를 사용하면 여러 가지 이점이 있습니다.
- 'const'는 데이터를 변경할 수있는 프로그래밍 오류로부터 보호합니다.
- 'const'를 사용한 결과 함수는 const 및 non-const 실제 인수를 모두 처리 할 수 있습니다. 이는 'const'를 사용하지 않으면 불가능합니다.
- const 참조를 사용하면 함수가 적절한 방식으로 임시 변수를 생성하고 사용할 수 있습니다.
구조 및 사용자 정의 데이터 유형
Q # 34) 수업이란?
대답: 클래스는 C ++의 사용자 정의 데이터 유형입니다. 특정 종류의 문제를 해결하기 위해 만들 수 있습니다. 생성 후 사용자는 클래스 작업의 세부 사항을 알 필요가 없습니다.
일반적으로 클래스는 프로젝트의 청사진 역할을하며 다양한 매개 변수와 이러한 매개 변수에서 작동하는 기능 또는 작업을 포함 할 수 있습니다. 이를 클래스의 멤버라고합니다.
Q # 35) 클래스와 구조의 차이.
대답:
구조: C 언어에서 구조는 서로 다른 유형의 데이터 유형을 함께 묶는 데 사용됩니다. 구조 내의 변수를 구조의 멤버라고합니다. 이러한 멤버는 기본적으로 공용이며 구조 이름, 점 연산자, 멤버 이름을 차례로 사용하여 액세스 할 수 있습니다.
수업: 클래스는 구조의 후계자입니다. C ++는 멤버에서 작동하는 함수를 포함하도록 구조 정의를 확장합니다. 기본적으로 클래스 내의 모든 멤버는 비공개입니다.
C ++를 사용한 객체 지향 프로그래밍
클래스, 생성자, 소멸자
Q # 36) 네임 스페이스 란 무엇입니까?
대답: 네임 스페이스를 사용하면 특정 이름으로 전역 클래스, 개체 및 / 또는 함수 집합을 그룹화 할 수 있습니다.
네임 스페이스를 사용하는 일반적인 형식은 다음과 같습니다.
네임 스페이스 식별자 {namespace-body}
여기서 identifier는 유효한 식별자이고 namespace-body는 네임 스페이스 내에 포함 된 클래스, 개체 및 함수의 집합입니다. 네임 스페이스는 둘 이상의 개체가 같은 이름을 가질 가능성이있어 이름 충돌이 발생할 가능성이있는 경우 특히 유용합니다.
Q # 37) '사용'선언의 사용은 무엇입니까?
대답: 선언 사용은 범위 확인 연산자없이 네임 스페이스에서 이름을 참조하는 데 사용됩니다.
Q # 38) 이름 맹 글링이란?
대답: C ++ 컴파일러는 함수 / 메서드가있는 매개 변수 유형을 고유 한 이름으로 인코딩합니다. 이 프로세스를 이름 맹 글링이라고합니다. 역 프로세스를 디망 글링이라고합니다.
예:
A :: b (int, long) const는 다음과 같이 엉망입니다. ‘b__C3Ail’ .
생성자의 경우 메서드 이름이 생략됩니다.
그건 A :: A (int, long) const는 다음과 같이 엉망입니다. 'C3Ail'.
Q # 39) 객체와 클래스의 차이점은 무엇입니까?
대답: 클래스는 해결해야 할 프로젝트 또는 문제의 청사진이며 변수와 메서드로 구성됩니다. 이를 클래스의 멤버라고합니다. 정적으로 선언되지 않는 한 클래스의 메서드 나 변수에 자체적으로 액세스 할 수 없습니다.
클래스 멤버에 액세스하여 사용하려면 Object라는 클래스의 인스턴스를 만들어야합니다. 클래스에는 무제한 수명이 있지만 객체는 제한된 수명 만 있습니다.
Q # 40) C ++의 다양한 Access Specifier는 무엇인가요?
대답: C ++는 다음 액세스 지정자를 지원합니다.
- 공공의: 데이터 멤버와 함수는 클래스 외부에서 액세스 할 수 있습니다.
- 은밀한: 데이터 멤버와 함수는 클래스 외부에서 액세스 할 수 없습니다. 예외는 친구 클래스의 사용입니다.
- 보호됨 : 데이터 멤버와 함수는 파생 클래스에서만 액세스 할 수 있습니다.
예:
PRIVATE, PROTECTED 및 PUBLIC을 차이점과 함께 설명하고 예를 제공하십시오.
class A{ int x; int y; public int a; protected bool flag; public A() : x(0) , y(0) {} //default (no argument) constructor }; main(){ A MyObj; MyObj.x = 5; // Compiler will issue a ERROR as x is private int x = MyObj.x; // Compiler will issue a compile ERROR MyObj.x is private MyObj.a = 10; // no problem; a is public member int col = MyObj.a; // no problem MyObj.flag = true; // Compiler will issue a ERROR; protected values are read only bool isFlag = MyObj.flag; // no problem
Q # 41) 컨스트럭터 란 무엇이며 어떻게 부르나요?
대답: 생성자는 클래스와 이름이 같은 클래스의 멤버 함수입니다. 주로 클래스의 멤버를 초기화하는 데 사용됩니다. 기본적으로 생성자는 공용입니다.
생성자를 호출하는 방법에는 두 가지가 있습니다.
- 암시 적으로 : 생성자는 클래스의 객체가 생성 될 때 컴파일러에 의해 암시 적으로 호출됩니다. 이것은 스택에 객체를 생성합니다.
- 명시 적 호출 : new를 사용하여 클래스의 객체를 만들면 생성자가 명시 적으로 호출됩니다. 이것은 일반적으로 힙에 개체를 만듭니다.
예:
class A{ int x; int y; public A() : x(0) , y(0) {} //default (no argument) constructor }; main() { A Myobj; // Implicit Constructor call. In order to allocate memory on stack, //the default constructor is implicitly called. A * pPoint = new A(); // Explicit Constructor call. In order to allocate //memory on HEAP we call the default constructor. }
Q # 42) COPY CONSTRUCTOR 란 무엇이며 언제 호출 되나요?
대답: 복사 생성자는 매개 변수와 동일한 클래스의 객체를 받아들이고 할당의 왼쪽 부분에있는 객체에 데이터 멤버를 복사하는 생성자입니다. 같은 클래스의 새로운 객체를 생성해야 할 때 유용합니다.
예:
class A{ int x; int y; public int color; public A() : x(0) , y(0) {} //default (no argument) constructor public A( const A& ) ; }; A::A( const A & p ) { this->x = p.x; this->y = p.y; this->color = p.color; } main() { A Myobj; Myobj.color = 345; A Anotherobj = A( Myobj ); // now Anotherobj has color = 345 }
Q # 43) 기본 생성자는 무엇입니까?
대답: 기본 생성자는 인수가 없거나있는 경우 모두 기본 인수 인 생성자입니다.
예:
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv[]) { B b; return 0; }
Q # 44) 변환 생성자 란 무엇입니까?
대답: 다른 유형의 인수 하나를 허용하는 생성자입니다. 변환 생성자는 주로 한 유형에서 다른 유형으로 변환하는 데 사용됩니다.
Q # 45) 명시 적 생성자 란 무엇입니까?
대답: 변환 생성자는 explicit 키워드로 선언됩니다. 컴파일러는 암시 적 형식 변환을 구현하기 위해 명시 적 생성자를 사용하지 않습니다. 그 목적은 구성을 위해 명시 적으로 예약되어 있습니다.
Q # 46) 클래스 멤버 변수에 대한 Static 키워드의 역할은 무엇입니까?
대답: 정적 멤버 변수는 각 클래스에 대해 생성 된 모든 개체에서 공통 메모리를 공유합니다. 개체를 사용하여 정적 멤버 변수를 참조 할 필요가 없습니다. 그러나 클래스 이름 자체를 사용하여 액세스 할 수 있습니다.
Q # 47) 정적 멤버 함수를 설명하세요.
대답: 정적 멤버 함수는 클래스의 정적 멤버 변수에만 액세스 할 수 있습니다. 정적 멤버 변수와 마찬가지로 클래스 이름을 사용하여 정적 멤버 함수에 액세스 할 수도 있습니다.
Q # 48) 로컬 오브젝트가 파괴되는 순서는 무엇입니까?
답변 : 다음 코드를 고려해보십시오.
Class A{ …. }; int main() { A a; A b; ... }
주요 기능에는 두 개의 객체가 차례로 생성됩니다. 먼저 a 다음에 b 순서대로 생성됩니다. 그러나 이러한 개체가 삭제되거나 범위를 벗어나면 각 개체에 대한 소멸자는 생성 된 역순으로 호출됩니다.
따라서 b의 소멸자가 먼저 호출 된 다음 a가 호출됩니다. 객체의 배열이 있더라도 생성의 역순으로 같은 방식으로 파괴됩니다.
과부하
Q # 49) 함수 오버로딩과 연산자 오버로딩을 설명하세요.
대답: C ++는 '다양한 형태'를 의미하는 OOP 개념 다형성을 지원합니다.
C ++에는 컴파일 타임 다형성과 런타임 다형성이라는 두 가지 유형의 다형성이 있습니다. 컴파일 타임 다형성은 오버로딩 기술을 사용하여 달성됩니다. 오버로딩은 단순히 기본 의미를 그대로 유지하여 엔티티에 추가 의미를 부여하는 것을 의미합니다.
C ++는 두 가지 유형의 오버로딩을 지원합니다.
기능 과부하 :
함수 오버로딩은 프로그래머가 이름은 같지만 매개 변수 목록이 다른 둘 이상의 함수를 가질 수 있도록하는 기술입니다. 즉, 인수 유형, 인수 개수 또는 인수 순서와 같이 다른 인수로 함수를 오버로드합니다.
반환 유형에서는 함수 오버로딩이 수행되지 않습니다.
연산자 오버로딩 :
이것은 C ++에서 지원하는 또 다른 유형의 컴파일 타임 다형성입니다. 연산자 오버로딩에서 연산자는 오버로드되므로 표준 데이터 유형의 피연산자와 함께 사용자 정의 유형에서도 작동 할 수 있습니다. 그러나이를 수행하는 동안 해당 연산자의 표준 정의는 그대로 유지됩니다.
예를 들어, 숫자 데이터 유형에 대해 작동하는 더하기 연산자 (+)는 복소수 클래스의 객체처럼 두 객체에 대해 작동하도록 오버로드 될 수 있습니다.
Q # 50) C ++에서 Method Overloading과 Method Overriding의 차이점은 무엇입니까?
대답: 메서드 오버로딩에는 이름은 같지만 인수 목록이 다른 함수가 있습니다. 이것은 컴파일 타임 다형성의 한 형태입니다.
메서드 재정의는 기본 클래스에서 파생 된 메서드를 다시 작성할 때 나타납니다. 메서드 재정의는 런타임 다형성 또는 가상 함수를 처리하는 동안 사용됩니다.
Q # 51) Copy Constructor와 Overloaded의 차이점은 무엇입니까? 할당 연산자?
대답: 복사 생성자와 오버로드 된 할당 연산자는 기본적으로 동일한 목적, 즉 한 개체의 콘텐츠를 다른 개체에 할당하는 역할을합니다. 그러나 여전히 둘 사이에는 차이가 있습니다.
예:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
위의 예에서 두 번째 문 c1 = c2는 오버로드 된 할당 문입니다.
여기서 c1과 c2는 모두 이미 존재하는 객체이며 c2의 내용은 객체 c1에 할당됩니다. 따라서 오버로드 된 할당 문의 경우 두 개체 모두 이미 생성되어야합니다.
다음 문인 complex c3 = c2는 복사 생성자의 예입니다. 여기서 c2의 내용은 새 객체 c3에 할당됩니다. 즉, 복사 생성자가 실행할 때마다 새 객체를 만듭니다.
Q # 52) 오버로드 할 수없는 연산자의 이름을 지정하십시오.
대답:
- sizeof – sizeof 연산자
- . – 도트 연산자
- . * – 역 참조 연산자
- -> – 멤버 역 참조 연산자
- :: – 범위 해결 연산자
- ? : – 조건부 연산자
Q # 53) 함수는 값 또는 참조 인 매개 변수에 따라 오버로드 될 수 있습니다. 진술이 사실인지 설명하십시오.
대답: 그릇된. 값으로 전달과 참조로 전달은 모두 호출자와 동일하게 보입니다.
Q # 54) 오퍼레이터 오버로딩의 이점은 무엇입니까?
대답: 표준 연산자를 클래스에 오버로드하면 이러한 연산자의 의미를 확장하여 다른 사용자 정의 개체에서도 작동 할 수 있습니다.
함수 오버로딩을 사용하면 코드의 복잡성을 줄이고 인수 목록이 다른 동일한 함수 이름을 가질 수 있으므로 코드를 더 명확하고 읽기 쉽게 만들 수 있습니다.
계승
Q # 55) 상속이란 무엇입니까?
대답: 상속은 기존 엔티티의 특성을 획득하고 더 많은 기능을 추가하여 새로운 엔티티를 형성 할 수있는 프로세스입니다.
C ++ 측면에서 상속은 기존 클래스에서 파생 된 새 클래스를 만들어이 새 클래스가 자신의 부모 클래스와 자신의 속성을 갖도록합니다.
Q # 56) 상속의 장점은 무엇입니까?
대답: 상속을 통해 코드를 재사용 할 수 있으므로 코드 개발 시간을 절약 할 수 있습니다.
상속함으로써 우리는 미래의 문제를 줄이는 버그없는 고품질 소프트웨어를 사용합니다.
Q # 57) C ++는 다중 수준 및 다중 상속을 지원합니까?
대답: 예.
Q # 58) 다중 상속 (가상 상속)이란 무엇입니까? 장점과 단점은 무엇입니까?
대답: 다중 상속에는 파생 클래스가 상속 할 수있는 기본 클래스가 두 개 이상 있습니다. 따라서 파생 클래스는 둘 이상의 기본 클래스의 기능과 속성을 사용합니다.
예를 들어 , 클래스 운전사 즉, 두 개의 기본 클래스가 있습니다. 종업원 운전자는 직원이자 사람이기 때문입니다. 이는 드라이버 클래스가 직원 및 사람 클래스의 속성을 상속 할 수 있기 때문에 유리합니다.
그러나 직원과 사람의 경우 클래스에는 몇 가지 공통 속성이 있습니다. 그러나 드라이버 클래스가 공통 속성을 상속해야하는 클래스를 알지 못하기 때문에 모호한 상황이 발생합니다. 이것은 다중 상속의 주요 단점입니다.
Q # 59) ISA 및 HASA 클래스 관계를 설명하십시오. 어떻게 구현 하시겠습니까 마다?
대답: 'ISA'관계는 일반적으로 다른 클래스의 'ISA'클래스 특수 버전을 의미하므로 상속을 나타냅니다. 예를 들어 , 직원 ISA 담당자. 이는 Employee 클래스가 Person 클래스에서 상속됨을 의미합니다.
'ISA'와는 반대로 'HASA'관계는 엔터티가 구성원으로 다른 엔터티를 가질 수 있거나 클래스에 다른 개체가 포함되어 있음을 나타냅니다.
따라서 Employee 클래스의 동일한 예를 살펴보면 Salary 클래스를 직원과 연결하는 방법은 상속이 아니라 Employee 클래스 내에 Salary 개체를 포함하거나 포함하는 것입니다. 'HASA'관계는 봉쇄 또는 집합에 의해 가장 잘 나타납니다.
Q # 60) 파생 클래스는 상속합니까 아니면 상속하지 않습니까?
대답: 파생 클래스가 특정 기본 클래스에서 생성되면 기본적으로 기본 클래스의 모든 기능과 일반 멤버를 상속합니다. 그러나이 규칙에는 몇 가지 예외가 있습니다. 예를 들어 파생 클래스는 기본 클래스의 생성자와 소멸자를 상속하지 않습니다.
각 클래스에는 자체 생성자와 소멸자가 있습니다. 파생 클래스는 또한 기본 클래스의 할당 연산자와 클래스의 친구를 상속하지 않습니다. 그 이유는 이러한 엔터티는 특정 클래스에 고유하고 다른 클래스가 파생되거나 해당 클래스의 친구 인 경우 해당 개체에 전달할 수 없기 때문입니다.
다형성
Q # 61) 다형성이란 무엇입니까?
대답: 다형성의 기본 개념은 다양한 형태입니다. C ++에는 두 가지 유형의 다형성이 있습니다.
(i) 컴파일 타임 다형성
컴파일 타임 다형성에서는 오버로딩을 통해 많은 형태를 얻습니다. 따라서 연산자 오버로딩과 함수 오버로딩이 있습니다. (이미 위에서 다루었습니다)
(ii) 런타임 다형성
이것은 클래스와 객체에 대한 다형성입니다. 일반적인 생각은 기본 클래스가 여러 클래스에 상속 될 수 있다는 것입니다. 기본 클래스 포인터는 자식 클래스를 가리킬 수 있고 기본 클래스 배열은 다른 자식 클래스 개체를 저장할 수 있습니다.
이것은 객체가 동일한 함수 호출에 다르게 반응 함을 의미합니다. 이러한 유형의 다형성은 가상 기능 메커니즘을 사용할 수 있습니다.
Q # 62) 가상 기능이란 무엇입니까?
대답: 가상 함수를 사용하면 파생 클래스가 기본 클래스에서 제공하는 구현을 대체 할 수 있습니다.
기본 클래스와 파생 클래스에 같은 이름의 함수가있을 때마다 기본 클래스 포인터를 사용하여 자식 클래스 개체에 액세스하려고하면 모호함이 발생합니다. 기본 클래스 포인터를 사용하고 있으므로 호출되는 함수는 동일한 이름의 기본 클래스 함수입니다.
이 모호함을 수정하기 위해 기본 클래스의 함수 프로토 타입 앞에 '가상'키워드를 사용합니다. 즉,이 다형성 함수를 가상으로 만듭니다. 가상 함수를 사용하면 모호함을 제거하고 기본 클래스 포인터를 사용하여 모든 자식 클래스 함수에 올바르게 액세스 할 수 있습니다.
Q # 63) 런타임 다형성 / 가상 함수의 예를 들어주세요.
대답:
class SHAPE{ public virtual Draw() = 0; //abstract class with a pure virtual method }; class CIRCLE: public SHAPE{ public int r; public Draw() { this->drawCircle(0,0,r); } }; class SQUARE: public SHAPE{ public int a; public Draw() { this->drawSquare(0,0,a,a); } }; int main() { SHAPE shape1*; SHAPE shape2*; CIRCLE c1; SQUARE s1; shape1 = &c1; shape2 = &s1; cout위 코드에서 SHAPE 클래스는 순수 가상 함수를 가지며 추상 클래스입니다 (인스턴스화 할 수 없음). 각 클래스는 자체 방식으로 Draw () 함수를 구현하는 SHAPE에서 파생됩니다.
또한 각 Draw 함수는 가상이므로 파생 클래스 (Circle 및 SQUARE)의 개체와 함께 매번 기본 클래스 (SHAPE) 포인터를 사용할 때 적절한 Draw 함수가 호출됩니다.
Q # 64) 순수 가상 기능이란 무엇을 의미합니까?
대답: 순수 가상 멤버 함수는 기본 클래스가 파생 클래스를 강제로 재정의하는 멤버 함수입니다. 일반적으로이 멤버 함수에는 구현이 없습니다. 순수 가상 기능은 0과 같습니다.
예:
class Shape { public: virtual void draw() = 0; };
순수 가상 기능을 구성원으로하는 기본 클래스는 '추상 클래스'라고 할 수 있습니다. 이 클래스는 인스턴스화 할 수 없으며 일반적으로 추가 구현이있는 여러 하위 클래스가있는 청사진 역할을합니다.
Q # 65) 가상 생성자 / 소멸자 란 무엇입니까?
대답:
가상 소멸자 : 파생 클래스 개체를 가리키는 기본 클래스 포인터를 사용하여이를 파괴하면 파생 클래스 소멸자를 호출하는 대신 기본 클래스 소멸자가 호출됩니다.
예:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
위의 예에서 볼 수 있듯이 delete a라고 말하면 소멸자가 호출되지만 실제로는 기본 클래스 소멸자입니다. 이로 인해 b가 보유한 모든 메모리가 제대로 지워지지 않는다는 모호함이 생깁니다.
이 문제는“Virtual Destructor”개념을 사용하여 해결할 수 있습니다.
우리가하는 일은 모든 자식 클래스 소멸자가 가상이되도록 기본 클래스 생성자를 '가상'으로 만들고 파생 클래스의 개체를 가리키는 기본 클래스의 개체를 삭제할 때 적절한 소멸자가 호출되고 모두 개체가 제대로 삭제됩니다.
다음과 같이 표시됩니다.
1 년 경력의 PHP 인터뷰 질문 및 답변
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
가상 빌더 : 생성자는 가상 일 수 없습니다. 생성자를 가상 함수로 선언하는 것은 구문 오류입니다.
친구
Q # 66) 친구 기능이란?
대답: C ++ 클래스는 클래스 외부에서 개인 및 보호 멤버에 액세스하는 것을 허용하지 않습니다. 그러나이 규칙은 ' 친구 ' 함수.
이름 자체에서 알 수 있듯이 friend 함수는 클래스의 친구 인 외부 함수입니다. friend 함수가 클래스의 private 및 protected 메서드에 액세스하려면 클래스 내부에 키워드 'friend'가 포함 된 friend 함수의 프로토 타입이 있어야합니다.
Q # 67) 친구 반이란?
대답: Friend 클래스는 두 클래스가 서로 밀접하게 작동 할 수 있도록 개인 및 보호 액세스 지정자에 대한 규칙을 재정의해야 할 때 사용됩니다.
따라서 다른 클래스의 친구가 될 친구 클래스를 가질 수 있습니다. 이런 식으로 친구 클래스는 비공개로 접근 할 수없는 것을 그대로 유지할 수 있습니다.
공개를 통해 세부 사항을 노출하지 않고 클래스 (개인 멤버)의 내부 구현에 액세스해야하는 요구 사항이있을 때 친구 기능을 사용합니다.
고급 C ++
템플릿
Q # 68) 템플릿이란?
대답: 템플릿을 사용하면 데이터 유형 (일반)과 독립적 인 함수를 만들 수 있으며 가능한 모든 데이터 유형으로 함수를 오버로드하지 않고도 모든 데이터 유형을 매개 변수로 사용하고 값을 반환 할 수 있습니다. 템플릿은 거의 매크로의 기능을 수행합니다.
프로토 타입은 다음 중 하나입니다.
주형 식별 > function_declaration;
주형 식별 > function_declaration;
두 프로토 타입의 유일한 차이점은 키워드 class 또는 typename을 사용하는 것입니다. 일반적인 기능의 기본 기능은 동일하게 유지됩니다.
예외 처리
Q # 69) 예외 처리 란 무엇입니까? C ++는 예외 처리를 지원합니까?
대답: 예 C ++는 예외 처리를 지원합니다.
코드가 항상 정상적으로 실행되는지 확인할 수는 없습니다. 오류가 없더라도 Google에서 작성한 코드가 오작동하도록 만들 수있는 특정 상황이있을 수 있습니다. 이 코드의 오작동을 예외 .
예외가 발생하면 컴파일러는 예외가 발생했음을 알 수 있도록 예외를 발생시켜야합니다. 예외가 발생하면 컴파일러는 프로그램 흐름이 올바르게 계속되거나 종료되도록 해당 예외가 올바르게 처리되는지 확인해야합니다. 이것은 예외 처리.
따라서 C ++에는 세 개의 키워드가 있습니다. 시험 , 던지다 과 잡기 예외 처리에 있습니다.
예외 블록의 일반 구문은 다음과 같습니다.
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
위와 같이 잠재적으로 오작동 할 수있는 코드는 try 블록 아래에 배치됩니다. 코드가 오작동하면 예외가 발생합니다. 이 예외는 catch 블록 아래에서 포착되어 적절한 조치가 취해집니다.
Q # 70) C ++ 표준 예외에 대한 코멘트?
대답: C ++는 try 블록 안에 코드를 넣으면 잡힐 수있는 몇 가지 표준 예외를 지원합니다. 이러한 예외는 기본 클래스 ' std :: exception”. 이 클래스는 C ++ 헤더 파일에 정의되어 있습니다.
이 클래스에서 지원하는 예외의 몇 가지 예는 다음과 같습니다.
bad_alloc – 'new'에 의해 발생
runtime_error – 런타임 오류에 대해 발생합니다.
bad_typeid – 유형 ID에 의해 발생
표준 템플릿 라이브러리 소개
Q # 71) 표준 템플릿 라이브러리 (STL) 란 무엇입니까? 다양한 유형의 STL 컨테이너는 무엇입니까?
대답: 표준 템플릿 라이브러리 (STL)는 표준 C ++ 사양에 포함되도록 ANSI위원회에서 승인 한 컨테이너 템플릿 라이브러리입니다. 요소를 저장하는 방법에 따라 다양한 유형의 STL 컨테이너가 있습니다.
- 대기열, 스택 – 기존 대기열 및 스택과 동일하며 적응 형 컨테이너라고합니다.
- 세트,지도 – 기본적으로 키 / 값 쌍이 있고 본질적으로 연관성이있는 컨테이너입니다.
- 벡터 및 – 이들은 본질적으로 순차적이며 어레이와 유사합니다.
Q # 72) Iterator 클래스 란 무엇입니까?
대답: C ++에서 컨테이너 클래스는 서로 다른 개체의 모음입니다.
이 개체 컬렉션을 탐색해야하는 경우 간단한 인덱스 변수를 사용하여 수행 할 수 없습니다. 따라서 STL에는 반복자 컨테이너 클래스의 내용을 단계별로 실행하는 데 사용할 수있는 클래스입니다.
반복자의 다양한 범주에는 다음이 포함됩니다. 입력 반복기, 출력 반복기, 순방향 반복기, 양방향 반복기, 랜덤 액세스 등
Q # 73) 외부 반복기와 내부 반복기의 차이점은 무엇입니까? 외부 반복자의 장점을 설명하십시오.
대답: 내부 반복기는 단계별 항목이있는 클래스의 멤버 함수로 구현됩니다.
외부 반복기는 단계별로 항목이있는 개체에 바인딩 할 수있는 별도의 클래스로 구현됩니다. External iterator의 기본 장점은 별도의 클래스로 구현되므로 구현하기 쉽다는 것입니다.
둘째, 다른 클래스이므로 많은 반복기 객체가 동시에 활성화 될 수 있습니다.
추가 읽기 => C # 인터뷰 질문
결론
이 기사에서는 C ++ 인터뷰의 거의 모든 주요 코딩 및 프로그래밍 주제를 다룹니다.
이 일련의 인터뷰 질문을 사용하여 인터뷰를 준비한 후 모든 후보자가 편안하게 느끼기를 바랍니다.
인터뷰를 위해 최선을 다하십시오 !!
추천 도서