본문 바로가기
ETC

[c++] c++의 특징

by dkswnkk 2021. 10. 18.

C와 비교한 C++의 특징

c언어와의 호환성

  • c언어의 문법 체계 계승

객체 지향 개념 도입

  • 캡슐화, 상속성, 다형성
    1. 소프트웨어의 재사용을 통해 생산성 향상
    2. 복잡하고 큰 규모의 소프트웨어의 작성, 관리, 유지보수 용이

c언어에 기능 추가

  • 함수 중복(function overloading): 매개 변수의 개수나 타입이 다른 동일한 이름의 함수들 선언
  • 디폴트 매개 변수(default parameter): 매개 변수에 디폴트 값이 전달되도록 함수 선언
  • 참조와 참조 변수(reference): 하나의 변수에 별명을 사용하는 참조 변수 도입
  • 참조에 의한 호출(call-by-reference): 함수 호출 시 참조 전달
  • new/delete 연산자: 동적 메모리 할당/해제를 위해 new와 delete 연산자 도입
  • 제네릭 함수와 클래스: 데이터 타입에 의존하지 않고 일반화시킨 함수나 클래스 작성 가능

 

c++ 객체지향 특성

캡슐화

캡슐화(Encapsulation)

  • 데이터를 캡슐로 싸서 외부의 접근으로부터 보호
  • c++에서 클래스(class 키워드)로 캡슐 표현
  • private: 동일한 클래스 내부에서만 접근 가능
  • public: 클래스 내/외부로부터 모두 접근 허용
  • protected: 클래스 내부 및 상속받은 자식 클래스에 접근 허용

클래스와 객체

  • 클래스: 객체를 만드는 틀
  • 객체: 클래스라는 틀에서 생겨난 실체
  • 객체(object), 실체(instance)는 같은 뜻
// 원을 추상화 한 Circle 클래스
class Circle{
    private:
        int radius;
    public:
        Circle(int r){
            radius = r;
            }
        double getArea(){
            return 3.14*radius*radius;
            }
};

상속성

객체 지향 상속(Inheritance): 자식이 부모의 유전자를 물려받는 것과 유사

c++ 상속: 객체가 자식 클래스의 멤버와 부모 클래스에 선언된 모양 그대로 멤버들을 가지고 탄생

class Phone{
    void call();
    void receive();
};
class MobilePhone : public Phone{    //Phone를 상속받는다.
    void connectWireless();
    void recharge();
};
class MusicPhone : public MobilePhone{ //MobiePhone을 상속받는다.
    void downloadMusic();
    void play();
};

다형성

다형성(Polymorphism)

  • 하나의 기능이 경우에 따라 다르게 보이거나 다르게 작동하는 형상
  • 연산자 중복, 함수 중복(overloading), 함수 재정의(overriding)

 

c++와 제네릭 프로그래밍

제네릭 함수와 제네릭 클래스

  • 제네릭 함수(generic function): 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반화시킨 함수
  • 제네릭 클래스(generic class): 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반화 시킨 클래스
  • template 키워드로 선언: 템플릿 함수 혹은 템플릿 클래스라고도 부름
  • java, c#등 다른 언어에도 동일한 개념이 있음.

 

c++ 프로그램 개발 과정

스크린샷 2021-10-17 오전 11 03 43

'ETC' 카테고리의 다른 글

[git] 레포지토리(폴더) 이름 수정하기  (0) 2021.10.20
[ios] 에뮬레이터 위치 정보 설정하기  (0) 2021.10.19
[c++] inline 함수  (0) 2021.10.18
[c++] c++의 문자열  (0) 2021.10.18
[c++] cin의 개념  (0) 2021.10.18
[c++] namespace 개념  (0) 2021.10.18

댓글