c++ 개념 정리 1

xx.xx·2024년 2월 12일
0

c++

목록 보기
6/8
post-thumbnail

c++ 와 c의 차이?

  1. 객체 지향 프로그래밍:

    • C는 절차 지향 프로그래밍 언어이며, 객체 지향 프로그래밍의 개념을 지원하지 않습니다. 반면에 C++은 객체 지향 프로그래밍을 완전히 지원하며, 클래스와 객체를 사용하여 프로그램을 구조화할 수 있습니다.
  2. 클래스와 객체:

    • C++은 클래스와 객체 개념을 도입하여 데이터와 함수를 하나의 단위로 묶을 수 있습니다. 이로써 데이터 은닉, 상속, 다형성과 같은 객체 지향의 특징들을 사용할 수 있습니다.
  3. 표준 라이브러리:

    • C++은 C의 표준 라이브러리를 포함하면서 동시에 추가로 표준 템플릿 라이브러리(STL)와 같은 기능이 향상된 라이브러리를 제공합니다. C++의 표준 라이브러리는 범용적이고 강력하며, 자료 구조, 알고리즘, 입출력 등을 지원합니다.
  4. 메모리 관리:

    • C는 메모리 관리를 위해 malloc(), free()와 같은 함수를 사용합니다. C++은 new와 delete 연산자를 사용하여 메모리를 동적으로 할당하고 해제
  5. 연산자 오버로딩:

    • C++에서는 연산자 오버로딩을 지원하여 사용자 정의 데이터 형식에 대한 연산을 재정의할 수 있습니다.
  1. 기타 특징:
    • C++에는 참조(reference)와 같은 특징이 추가되어 있습니다. 또한, 네임스페이스(namespace)와 템플릿(template)을 통해 유연성이 높아졌습니다.

요약하면, C++은 C의 기능을 계승하면서 객체 지향 프로그래밍과 다양한 새로운 기능을 도입한 언어입니다. C++은 높은 수준의 추상화와 유연성을 제공하여 프로그래머에게 더 많은 도구와 선택지를 제공합니다.


c와 비교했을 때, c++ 언어에 추가된 기능?

c언어의 문법적 규칙을 그대로 계승하였으며 아래와 같은 기능들이 추가되었다.

  • 인라인 함수

    • 자주 호출되는 함수의 경우 함수 호출 대신 함수 코드를 삽입하여 실행 시간을 줄임
  • 함수 중복

    • 매개변수의 개수나 타입이 서로 다른 동일한 이름의 함수들을 선언할 수 있도록 함
  • 디폴트 매개 변수

    • 매개변수값이 전달되지 않는 경우 디폴트 값이 전달되도록 함수 선언
  • 참조

    • 함수 호출 시 참조를 전달할 수 있게 함
  • 참조에 의한 호출

    • 함수 호출 시 참조를 전달할 수 있게 함
  • new, delete 연산자

    • 동적 메모리 할당, 해제를 위한 연산자
  • 연산자 재정의

    • 기존의 연산자에 새로운 연산 정의 가능
  • 제너릭 함수와 클래스

    • 함수나 클래스를 데이터 타입에 의존하지 않고 일반화할 수 있도록 함

Q . c++의 객체 지향적 특성?

  • 캡슐화
    클래스는 객체를 정의하는 틀이며 객체는 클래스라는 틀에서 생겨난 실체
  • 상속성
  • 다형성

Q . 객체 지향?

객체 지향 프로그래밍(OOP, Object-Oriented Programming)은 프로그램을 객체들의 집합으로 바라보고 객체들 간의 상호 작용을 중심으로 프로그래밍하는 패러다임입니다. 여기에서 "객체"는 데이터와 그 데이터를 조작하는 메서드(함수)로 이루어진 하나의 독립적인 단위를 나타냅니다.

  1. 캡슐화 (Encapsulation):

    • 데이터와 해당 데이터를 조작하는 메서드를 하나의 단위로 묶어서 객체를 형성합니다. 이렇게 하면 객체의 내부 구현을 외부에서 감추고, 오직 객체의 메서드를 통해서만 데이터에 접근할 수 있도록 합니다. 이는 보안성을 높이고, 코드의 재사용성을 증가시킵니다.
  2. 상속 (Inheritance):

    • 클래스 간의 "is-a" 관계를 나타내는 상속을 통해, 하나의 클래스가 다른 클래스의 특성(데이터와 메서드)을 상속받을 수 있습니다. 이를 통해 코드의 재사용성을 증가시키고, 계층 구조를 형성하여 객체를 논리적으로 분류할 수 있습니다.
  3. 다형성 (Polymorphism):

    • 다형성은 같은 이름의 메서드나 연산자가 여러 클래스에서 다르게 구현될 수 있는 특성입니다. 다형성을 통해 여러 객체를 동일한 인터페이스로 다룰 수 있어 코드의 유연성을 증가시키고, 각 객체의 특성에 맞게 다양한 동작을 수행할 수 있습니다.
  4. 추상화 (Abstraction):

    • 객체 지향 프로그래밍에서는 실제 세계의 개념을 추상화하여 모델링합니다. 즉, 복잡한 시스템이나 개념을 간소화하여 필요한 부분만을 추출하여 표현하는 것을 말합니다. 이로써 코드의 가독성을 높이고, 프로그래머가 핵심적인 부분에 집중할 수 있습니다.
  5. 클래스와 객체:

    • 클래스는 객체를 만들기 위한 템플릿으로, 데이터와 메서드를 정의합니다. 객체는 클래스의 인스턴스로, 클래스에서 정의된 특성을 가지고 있습니다. 객체는 실제로 프로그램에서 사용되는 실행 가능한 단위입니다.

객체 지향 프로그래밍은 복잡한 소프트웨어를 구조화하고 관리하는 데에 매우 효과적이며, 대규모 소프트웨어 개발에서 널리 사용되고 있습니다. Java, C++, Python, C#과 같은 언어들은 객체 지향 프로그래밍을 지원하고 있습니다.


파이썬과 C++의 차이?

파이썬과 C++은 모두 객체지향 언어입니다.
파이썬은 인터프리터 언어로 소스 코드를 한줄씩 읽어 명령을 처리하기 때문에 컴파일러 언어보다 실행 속도가 상대적으로 느립니다.
C++은 컴파일러 언어이며 코드를 한 번에 어셈블리 언어로 번역한 후 한 번에 실행하는 방식을 채택하고 있어 일반적으로 높은 성능을 보입니다.


## 오버로딩 vs 오버라이딩?

둘 다 다형성을 보여즈는 예로,
오버로딩 : 같은 이름의 함수가 매개변수의 개수/타입이 다르면 다른 함수로 인식되는 것

void add(int a, int b){..}
void add(float a, float b, float c){..}

오버라이딩 : 상속 관계에서 부모의 클래스에 구현된 함수를 자식 클래시에서 동일한 이름으로 다르게 구현하는 것

class animal
{
	public:
		void cry(){cout<<"엉엉"<<endl;}
}

class dog : public animal
{
	public:
		void cry(){cout<<"먕먕"<<endl;
}
class cat : public animal
{
	public:
		void cry(){cout<<"냥냥"<<endl;
}

C++의 특징

C++은 객체지향언어로, 다음 네 가지 특징을 가지고 있습니다.

  1. 다형성 (Polymorphism): 객체가 여러 가지 타입을 가질 수 있는 특성으로, 동일한 모양의 코드가 다른 행위를 할 수 있도록 합니다.

  2. 캡슐화 (Encapsulation): 비슷한 속성과 메소드를 하나의 클래스로 묶어서 외부에서의 접근을 제어하는 것을 의미합니다. 이는 정보 은닉을 통해 클래스 내부를 외부에 공개하지 않아 외부에서 클래스를 마음대로 수정하는 일을 방지합니다.

  3. 상속 (Inheritance): 부모 클래스의 메소드와 필드를 자식 클래스에서 그대로 물려받는 것으로, 코드의 재사용성을 높이고 클래스의 재사용과 확장을 용이하게 합니다.

  4. 추상화 (Abstraction): 여러 객체에서 공통적이고 중요한 부분을 추출하여 하나의 분류로 만드는 개념으로, 클래스를 통해 관심 있는 특성을 추상화하여 표현합니다.


C++ 프로그램 빌드 과정?

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

컴퓨터는 0과 1로만 이루어져있기 때문에 컴퓨터가 이해할 수 있도록 만들어 주어야 한다. 이런 과정을 빌드라고 한다.

전처리(preprocessing) : 코드의 주석을 제거, define을 치환

컴파일러(compiler) : 어셈블리 파일로 변환, 어셈블리는 CPU 명령어 조합 (어휘 분석, 구문 분석, 의미 분석)

어셈블러(assembler) : 오브젝트 파일로 변환, 오브젝트 코드는 0과 1로 이루어진 코드

링커(linker) : 오브젝트 파일들을 묶어서 실행 코드 파일로 변환, 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 낸다. 번역된 파일을 하나로 연결해 실행가능한 파일로 만들어준다.

0개의 댓글