[C++] C++ 언어 특징

limce·2024년 1월 22일
0

C++

목록 보기
2/5
post-thumbnail

C++ 설계 목적

  • 소스 레벨 호환성:

    • C 언어로 작성된 프로그램과의 호환성 유지
    • C 언어의 문법적 체계를 그대로 계승
  • 링크 레벨 호환성:

    • C 언어로 작성되어 컴파일된 목적 파일(C object file)이나 Library를 C++ 프로그램에서 링크하여 사용할 수 있다.
  • 소프트웨어의 재사용을 통해 소프트웨어 생산성을 높이고, 복잡하고 큰 규모의 소프트웨어 작성, 관리, 유지 보수를 쉽게 하기 위해서 데이터 캡슐화(자료은닉), 상속(재사용성), 다형성 등의 객체 지향적 개념을 도입

  • 타임 체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 돕는다.

  • 실행 시간의 효율성 저하를 최소화

C 언어에 추가한 기능

  • 인라인 함수:
    자주 호출되는 함수의 경우, 호출 대신 함수 코드를 확장 삽입. 실행 시간 단축에 유용
  • 함수 중복:
    매개 변수의 개수나 타입이 서로 다른 동일한 이름의 함수 선언 가능(오버로딩)
  • 디폴트 매개 변수:
    매개 변수에 값이 전달되지 않는 경우, 디폴트 값이 전달되도록 함수 선언 가능
  • 참조:
    변수에 별명을 붙여 변수 공간을 같이 사용할 수 있는 참조의 개념을 도입
  • 참조에 의한 호출:
    함수 호출시 참조를 전달할 수 있다.
  • new와 delete 연산자:
    동적 메모리 할당, 해제를 위한 두 연산자 도입
  • 연산자 재정의:
    기존의 연산자에 새로운 연산을 정의할 수 있다.
  • 제네릭 함수의 클래스:
    함수나 클래스를 데이터 타입에 의존하지 않고 일반화 시킬 수 있다.

Generic Programming

  • 템플릿으로 대변되는 제네릭 프로그래밍 특성이 C언어와 C++의 큰 차이점
  • template 키워드로 선언한다. 템플릿 함수, 템플릿 클래스라고도 부른다.
    Java, C# 등 다른 언어에도 동일한 개념이 있다.

제네릭 함수

  • 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반화 시킨 함수

제네릭 클래스

  • 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반화 시킨 클래스
template <class T> 
//template: 템플릿을 선언하는 키워드 
//class: 제네릭 타입을 선언하는 키워드 
//T: 제네릭 타입 T 선언 
void swap(T& a, T& b) { 
	T tmp; 
	tmp a; 
	a = b;
	b = tmp; 
}
#include<iostream>
using namespace std;

class Circle {
	int radius;//private
public:
	Circle(int radius = 1) {
		this->radius = radius;
	}
	int getRadius() {
		return radius;
	}
};

template<class T>
void myswap(T& a, T& b) {
	T tmp;
	tmp = a;
	a = b;
	b = tmp;
}

void main() {
	int a = 4, b = 5;
	myswap(a, b);
	cout << "a=" << a << "," << "b=" << b << endl;

	double c = 4, d = 5;
	myswap(c, d);
	cout << "a=" << a << "," << "b=" << b << endl;
	
	Circle donut(5), pizza(20);
	myswap(donut, pizza);
	cout << "donut 반지름=" 
    << donut.getRadius() << endl;
	cout << "pizza반지름=" 
    << pizza.getRadius() << endl;
}

참고
https://neos518.tistory.com/46
https://velog.io/@doorbals_512/UNSEEN-테스트-대비-C-언어의-특징
https://velog.io/@pantokrator3841/cpp-언어의-특징
https://rgy1989.tistory.com/entry/c특징
https://newindow.tistory.com/94

0개의 댓글