ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++ CS 면접 정리
    프로그래밍 지식/언어 2022. 3. 13. 02:22

    C++

    https://se-jung-h.tistory.com/m/entry/CS-지식-C와-C의-차이

     

    CS 지식 / C와 C++의 차이

    C와 C++의 차이 두언어의 차이는 C언어는 절차지향 프로그래밍(Procedure Oriented Programming)이고 C++언어는 객체지향 프로그래밍(Object Oriented Programming)이라는 것이다. C++은 C를 발전시켜 만든 언..

    se-jung-h.tistory.com

     

     

    ** C와 C++ 차이

    절차지향 프로그래밍 (기능 중심) / 객체지향 프로그래밍 (데이터 중심)

    차이점 : C++은 객체 중심, namespace, 오버라이딩, 예외처리, 일반적인 프로그래밍 사용 가능

     

     

    C 장/단점

    장점 : 컴퓨터 처리구조와 유사해 실행속도 빠름, 효율성 높고 간결, 문법 간결, 로우레벨 프로그래밍에 사용(하드웨어 직접 제어 프로그래밍 가능), 이식성 좋음

    단점 : 유지 보수 어렵고 디버깅 어려움

     

     

    ** C++ 장/단점

    장점 : 코드의 재활용성이 높음, 객체지향 프로그래밍(캡슐화, 상속성, 다형성), 오류 수정 쉬움, 이식성 좋고 유연

    단점 : 절차지향언어보다 속도 느림

     

     

    ** C++ vs 자바

    C++ → 속도, C언어와의 하위 호환성

    Java → 이식성, 빠른 개발

    java → 가상 머신 바이트 코드로 컴파일하며, 실행시키려면 가상 머신 필요

    c++ → 머신에 맞는 기계어로 컴파일

     

     

    ** C / C++ 차이 : 씨는 절차지향 프로그래밍 언어이고 씨플플은 객체 지향 프로그래밍 언어입니다. 절차지향은 프로그래밍을 순차적은 처리하고 객체지향은 객체 중심으로 데이터와 메소드를 만들어 엮어 처리합니다. 객체 지향은 캡슐화, 추상화, 상속, 다형성같은 특징을 가지며 구조화 되어있습니다.

     

    - 캡슐화 - 비슷한 역할을 하는 속성과 메소드를 하나의 클래스로 모은 것

    - 상속 - 클래스를 재사용하는 것 (멤버변수, 메소드)

    - 추상화 - 어떤 실체로부터 공통적인 부분이나 관심 있는 특성을 한 곳에 모은 것을 의미합니다. (인터페이스)

    - 다형성은 같은 모양의 함수가 상황에 따라 다르게 동작하는 것을 의미합니다.

     

     

    c++의 경우에는 상위 클래스 타입 변수에 하위 클래스를 담은 상태에서 메소드를 호출하면 상위 클래스의 메소드가 호출되고, 하위 클래스 타입 변수에 하위 클래스를 담으면 하위 클래스의 메소드가 호출된다.

    즉, 메소드의 이름은 똑같은데, 상황(상위 클래스의 참조 변수냐 하위 클래스의 참조 변수냐)에 따라 호출 되는 메소드가 다른것

    (사용시 타입 변수에 따라서 달라짐)

     

     

    오버로딩 - 함수 이름은 같으나 함수의 매개변수 숫자, 타입을 달리해서 사용하는 것 (함수 중복 정의)

    특징)   메소드 이름이 같다.

    리턴형이 같아도 되고 달라도 된다.

    파라미터 갯수가 달라야함

    파라미터 갯수가 같으면, 자료형이 달라야함

     

     

    오버라이딩 - 상위 클래스 메소드를 하위 클래스에서 재정의 하는 것을 의미 (함수 재정의)

    메소드가 상위 클래스에 있어야함

    메소드 이름이 같다

    메소드 파라미터 갯수, 자료형 같다.

    메소드 리턴형이 같다.

    상위 메소드와 동일하거나 내용이 추가되어야 한다.

     

     

    ** constructor / destructor

    생성자를 이용하여 객체를 생성함과 동시에 멤버 변수를 초기화 할 수 있다. 생성자는 특별한 메소드로 클래스 이름과 동일한 이름으로 구현된다. 생성자를 따로 구현하지 않는다면 Default로 멤버 변수가 NULL로 초기화된다. 또한 생성자는 입력 매개 변수를 다르게 함으로써 중복 정의할 수 있다.

    소멸자는 더 이상 사용하지 않는 객체를 제거하기 위해 호출되는 함수입니다. 객체의 메모리 반환을 위해 사용됩니다. 클래스 이름 앞에 ~가 붙은 형태로 사용됩니다.

     

     

    ** 가상 함수

    파생 클래스에서 재정의할 것으로 기대하는 멤버 함수 (virtual을 붙이고, Public: 에 존재해야 한다.)

    동적 바인딩을 하기 위해 (런타임에 프로그램의 성격을 결정)

    어떤 포인터에 의해 접근되었는지에 상관없이 인스턴스의 실제 클래스형에 따라 재정의된 함수 호출 가능

    (오버라이딩과 반대)

     

     

    ** \n과 endl 차이

    두 개 다 개행을 의미한다. endl은 출력 버퍼를 비워주는 과정 (flush)이 들어있어서 더 느리다.

    cf. 버퍼는 입출력을 프로그램에 바로 전달하지 않고 임시 메모리 공간에 저장한 후 한번에 전송하는 역할을 한다.

     

     

    ** malloc과 new 차이

    malloc은 C언어에서, new는 C++ 언어에서 사용.

    malloc은 함수고 new는 연산자다.

    malloc은 힙 영역에서, new는 dynamic memory에서 할당된다.

    malloc은 초기값 쩡이 불가능하고, new는 초기값 지정이 가능하다. new는 객체에서 생성자를 자동으로 호출하고 초기화해준다.

    객체의 경우 new, 재할당 잦은 경우 malloc (relloc이 있기 때문에)

     

     

    ** struct와 class 차이

    struct과 class 모두 객체를 구조화하는 역할을 합니다.

    struct는 기본 한정자가 public 이고, class는 private 입니다.

     

     

    ** 얕은 복사, 깊은 복사

    얕은 복사 = 메모리 주소만을 복사

    깊은 복사 = 변수가 관리하는 리소스 자체를 새롭게 메모리를 할당하여 새롭게 멤버 변수에 복사ㅏ는 것을 의미합니다. 얕은 복사에 비해 작업 시간과 리소스 소모가 따릅니다. (strcpy)

     

     

    ** 입출력 실행속도 올리는 법

     

    1. ios::sync_with_stdio(false) : iosstream을 C의 stdio와 동기화 끔. iostream 버퍼와 stdio버퍼를 모두 사용하므로 딜레이가 발생하는데, 이를 끊어서 실행 속도 높임
    2. cin.tie(NULL); cout.tie(NULL); 은 스트림을 untie 시켜서 자동적으로 입출력 버퍼를 비우지 않도록 설정함으로써 속도를 높인다.

     

     

     

    ** C++ 빌드 과정

    전처리 → 컴파일러 → 에셈블러 → 링커

     

    전처리 : 코드 주석 제거, define 치환

    컴파일러 : 어셈블리 파일로 변환

    어셈블러 : 오브젝트 파일로 변환 (0과 1)

    링커 : 오브젝트 파일들을 묶어서 실행코드 파일로 변환

     

    컴파일 언어의 장점 : 빌드가 완료된 실행가능한 파일은 실행 속도가 빠르다.

     

     

    ** C++ namespace

    모든 식별자(변수, 함수, 형식 등의 이름)가 고유하도록 보장하는 코드 영역을 의미.

     

    :: 범위 지정 연산자 → 특정 네임스페이스에서 식별자를 찾게 하는 것

    네임스페이스는 중첩 가능.

    std → c은 표준 라이브러리의 모든 기능을 std namespace라는 특별한 영역으로 옮겼기 때문

     

     

    ** c++ 접근 지정자

    public : 자기 자신 접근 가능, 자식이 부모 접근 가능, 외부 접근 가능

    protected : 자기 자신 접근 가능, 자식이 부모 접근 가능

    private : 자기 자신 접근 가능

Designed by Tistory.