여기에서 몇 가지 중요한 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