여기에서 몇 가지 중요한 C++ 인터뷰 질문을 볼 수 있습니다.
-
C와 C++의 차이점은 무엇입니까?
| 키 | C | C++ |
|---|---|---|
| 소개 | C는 1969년경 AT&T Bell Labs에서 Dennis Ritchie에 의해 개발되었습니다. | C++는 1979년 Bjarne Stroustrup에 의해 개발되었습니다. |
| 언어 유형 | 앞서 언급했듯이 C는 절차적 프로그래밍입니다. | 반면에 C++는 절차적 프로그래밍 패러다임과 객체 지향 프로그래밍 패러다임을 모두 지원합니다. |
| OOP 기능 지원 | C는 OOP 개념을 지원하지 않으므로 다형성, 캡슐화 및 상속을 지원하지 않습니다. | C++는 객체 지향 프로그래밍 언어이므로 다형성, 캡슐화 및 상속을 지원합니다. |
| 데이터 보안 | C는 캡슐화를 지원하지 않으므로 데이터는 자유 엔티티처럼 작동하고 외부 코드에 의해 조작될 수 있습니다. | 반면에 C++ 캡슐화의 경우 데이터 구조와 연산자가 의도한 대로 사용되도록 데이터를 숨깁니다. |
| 구동 유형 | C는 일반적으로 함수 중심 언어로 알려져 있습니다. | 반면에 C++는 객체 주도 언어로 알려져 있습니다. |
| 지원되는 기능 | C는 함수를 지원하지 않으며 연산자 오버로딩도 네임스페이스 기능 및 참조 변수 기능이 없습니다. | 반면, C++는 함수와 연산자 오버로딩을 모두 지원하며, 네임스페이스 기능과 참조 변수 기능도 가지고 있습니다. |
-
포인터와 참조의 차이점은 무엇입니까?
포인터와 참조의 주요 차이점은 -
-
참조는 다른 이름의 기존 변수를 참조하는 데 사용되는 반면 포인터는 변수의 주소를 저장하는 데 사용됩니다.
-
참조는 null 값을 할당할 수 없지만 포인터는 할당할 수 있습니다.
-
참조 변수는 값으로 참조할 수 있는 반면 포인터는 참조할 수 있지만 참조로 전달할 수 있습니다.
-
참조는 선언 시 초기화되어야 하지만 포인터의 경우 필요하지 않습니다.
-
참조는 원래 변수와 동일한 메모리 주소를 공유하지만 스택에서 약간의 공간도 차지하는 반면 포인터는 스택에서 자체 메모리 주소와 크기를 갖습니다.
-
C++에서 가상 함수란 무엇입니까?
C++의 가상 함수는 파생 클래스 개체의 종류를 모른 채 기본 클래스 포인터 목록을 만들고 파생 클래스의 메서드를 호출하는 데 사용합니다. 가상 기능은 런타임에 늦게 해결됩니다.
기본 클래스의 가상 함수가 한 번 멤버 함수로 선언된 경우 해당 기본 클래스에서 파생된 모든 클래스에서 가상 함수가 됩니다. 따라서 가상 기본 클래스 함수의 재정의 버전을 선언하면서 파생 클래스에서는 virtual 키워드를 사용할 필요가 없습니다.
예시
#include<iostream>
using namespace std;
class B {
public:
virtual void s() {
cout<<" In Base \n";
}
};
class D: public B {
public:
void s() {
cout<<"In Derived \n";
}
};
int main(void) {
D d; // An object of class D
B *b= &d; // A pointer of type B* pointing to d
b->s(); // prints"D::s() called"
return 0;
} 출력
In Derived
C++에서 이 포인터는 무엇입니까?
C++의 모든 객체는 이 포인터라는 중요한 포인터를 통해 자신의 주소에 액세스할 수 있습니다. this 포인터는 모든 멤버 함수에 대한 암시적 매개변수입니다. 따라서 멤버 함수 내에서 호출하는 개체를 참조하는 데 사용할 수 있습니다.
친구는 클래스의 구성원이 아니기 때문에 친구 함수에는 this 포인터가 없습니다. 멤버 함수에만 this 포인터가 있습니다.
이 포인터의 개념을 이해하기 위해 다음 예를 시도해 보겠습니다. -
예시
#include <iostream>
using namespace std;
class Box {
public:
// Constructor definition
Box(double l = 2.0, double b = 2.0, double h = 2.0) {
cout <<"Constructor called." << endl;
length = l;
breadth = b;
height = h;
}
double Volume() {
return length * breadth * height;
}
int compare(Box box) {
return this->Volume() > box.Volume();
}
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
int main(void) {
Box Box1(3.3, 1.2, 1.5); // Declare box1
Box Box2(8.5, 6.0, 2.0); // Declare box2
if(Box1.compare(Box2)) {
cout << "Box2 is smaller than Box1" <<endl;
} else {
cout << "Box2 is equal to or larger than Box1" <<endl;
}
return 0;
} 출력
Constructor called. Constructor called. Box2 is equal to or larger than Box1