객체언어의 특징중 하나인 다형성

함수의 다형성으로서 같은 이름의 함수가 디폴트 매개변수의 개수나 아니면 자료형이 다르다면

같은 이름의 함수를 사용하지만 다른 기능으로 이용할수 있다.

 

오버로딩의 사용하는 이유?

사실 이부분은 필자도 프로그래밍 처음 배울때 정말 궁금했던 부분이다. 

항상 이걸 왜써야하지 굳이 안써도 되는데 사실 이말도 틀린건 아니다.

하지만 우리는 프로그래밍을 하는 사람이라면 남들이 보았을때 여러 이름의 함수가 있는것보다

하나의 이름의 함수가 같은 기능의 함수들이 존재하는게  훨씬 편할것이다.

 

예를들어 Print() 함수가 있다고 가정해보자. 

Print함수는 외부에 데이터 값을 출력해주는 함수라고 가정해보자 

그러면 우리가 int형 ,string 형, char형... 등등 여러가지의 형태의 자료형이 존재한다.

여러 이름의 함수를 사용하면 PrintInt(), PrintString(),.... 이런식으로 계속해서 쓰이면 

얼마나 귀찮은가 그리고 어차피 출력문인데 같은 함수로 전부 통일하면 훨씬 편하지 않겠는가

그러면 Print 이 함수 하나로 모든 자료형을 출력이 가능해진다. 

이건 하나의 예시고 오버로딩은 프로그래밍을 하면할수록 정말 엄청나게 편리한 기능이라는거다. 

굳이 왜써야지가 아니라 오 이런 기능도 잇구나 하고 긍정적으로 받아들이는게

배우는 입장에선 엄청 좋은것같다. 어디까지나 필자의 생각이다. 

 

 

ex)

int Position(int x,int y);

int Position(int sum);

이 두함수는 같지만 매개변수(파라미터, 어규먼트)가 달라서 서로 다른 기능으로 사용할수 있다.

 

int Position(int x,int y){

   return x*y;

}

 

int Position(int sum){

   return sum+sum;

}

 

이런식으로 사용가능하다 .

하지만 주의점이 존재한다 .

 

ex)

double cube(double x);

double cube(double &x);

 

위의 함수를 보면 오버로딩 될것 같지만 될수가 없다

왜냐하면 

cube(x);

라고 가정해보자 

 

그러면 x가 double x 인지 double &x 전부 일치 해버린다.

그러면 이러한 모호한 관계가 되버려서 위의 두개의 함수중 어떠걸 사용하는지 알수가 없어진다.

 

그래서 어떤 자료형에 대한 참조와 자료형 자체를 같은것으로 간주한다. 

 

또하나 기능중 const에 따라 오버로딩이 구분된다. 

1.void dribble(char* bits);//오버로딩 된다

2.void dribble(const char*cbits);//오버로딩 된다

 

즉 처음에 선언해주는 데이터가 const를 가지고 선언된다면 

2번 함수를 사용하며 const가 없으면 1번함수를 참고합니다.

 

만약 void davl(char* bits); 함수가 존재시 

davl(const 매개변수(파라미터,어규먼트) );를 사용하면 

davl함수는 const 매개변수를 가진  대응하는 함수가 존재 하지 않습니다. 

void davl(char* bits); 함수를 이용하지 못합니다.

 

 

'프로그래밍언어 > C++' 카테고리의 다른 글

<c++>레지스터 변수  (0) 2020.10.15
<c++>decltype  (0) 2020.10.14
c++ array 탬플릿  (0) 2020.09.09
자동공간, 정적 공간 , 동적 공간(힙)(automatic ,static ,dynamic )  (0) 2020.09.08
strcpy, strcnpy 차이  (0) 2020.09.08

사용 예시

#include<array>
...
using namespace std;
array<int,5> ai;
array<double, 4> ad={1.2,2.1,3.1,4.1};

'프로그래밍언어 > C++' 카테고리의 다른 글

<c++>decltype  (0) 2020.10.14
오버로딩  (0) 2020.10.04
자동공간, 정적 공간 , 동적 공간(힙)(automatic ,static ,dynamic )  (0) 2020.09.08
strcpy, strcnpy 차이  (0) 2020.09.08
문자열 복사와 대입  (0) 2020.09.08

 

 

자동 공간(stack)

자동 공간을 사용하는 함수 안에서 정의되는 보통의 변수들을 자동 변수 라고 한다.

-자동 변수들이 자신이 정의되어 있는 함수가 호출되는 수간에 자동으로 생겨나 

 함수 종료까지만 존재합니다. 

-자동 변수는 스택에 저장된다.

-후입 선출 또는 LIFO

-스택은 프로그램이 실행하는 동안 늘었다 줄었다를 반복한다.

ex)

void func(){

int a=40; // 자동 공간 저장 

char ch ='d';  // 자동 공간 저장 

}

 

정적 공간 (static)

-정적 공간은 프로그램이 실행되는 동안에 지속적으로 존재하는 공간이다.

-K&R C에서는 정적 배열과 정적 구조체만 초기화 가능. 그러나,

C++ Release 2.0(이후) ANSI C 에서는 자동 배열과 자동 구조체를 초기화 하는것을 허용

-정적 변수는 프로그램이 실행되는 동안에 지속적으로 존재

-자동 변수는 특정 함수나 블록이 실행 되는 동안에만 존재

ex) static double fee =56.50;

 

동적 공간 (heap)

-동적 공간은 자유 공간 또는 힙(heap)이라고 부른다.

-new 와 delete 연산자는 보다 융통성 있는 방법으로 제공 

-자유공간(free store), 메모리 풀(memory pool)을 관리 

-데이터의 수명은 프로그램의 수명이나 함수의 수명에 얽매이지 않음

-new 와 delete를 함께 사용하면 일반 변수를 사용할때 보다 메모리에 대해 더 강력한 

제어권을 가짐 

ex)int a =new int ;

 

 

*메모리 관리는 점점 더 복잡해짐에 따라 스택의 경우, 자동적으로 늘어나고 줄어드는

매커니즘으로 인해 값들이 메모리상에서 인접하여 존재하게 된다. 

그러나  new와 delete의 상호 작용으로 여유 공간을 확보 할수 있고, 더 복잡한 메모리 대입 

요청을 처리할수 있다.

 

 

 

'프로그래밍언어 > C++' 카테고리의 다른 글

오버로딩  (0) 2020.10.04
c++ array 탬플릿  (0) 2020.09.09
strcpy, strcnpy 차이  (0) 2020.09.08
문자열 복사와 대입  (0) 2020.09.08
enum의 주의점  (0) 2020.09.02

strcpy는 정해진char형 배열를 복사해주는 역할을한다. 

strcnpy는 정해진 char형이 아닌 동적으로 char 배열의갯수를 생성해서 복사해준다 

 

ex)

char food[20];

strcpy(food,"a picnic basket filled with many goodies");// 20개 문자열보다 큼 그래서 프로그램 작동이 멈출수 잇음

 

그래서 strcnpy를 사용하여 세번째 파라미터에 문자열의 복사할 최대 문자수를 지정해줌  

strncpy(food,"a picnic basket filled with many goodies",19);

food[19]="\0" //문자열 마지막엔 null 값을 넣어줘야함 

이러면 널값을 제외한 18글자가 전부 복사가 됨 

 

ouput->a picnic basket fi

'프로그래밍언어 > C++' 카테고리의 다른 글

c++ array 탬플릿  (0) 2020.09.09
자동공간, 정적 공간 , 동적 공간(힙)(automatic ,static ,dynamic )  (0) 2020.09.08
문자열 복사와 대입  (0) 2020.09.08
enum의 주의점  (0) 2020.09.02
union, struct 차이  (0) 2020.09.02

대입 

char animal[20]="bear"

char*ps;

 

ps=animal;

ps,animal 

->address값 동일, value값 동일 

 

 

복사

char animal[20]="bear"

char*ps;

 

strcpy(ps,animal)

ps,animal 

->address값 다름 , value값 동일 

 

'프로그래밍언어 > C++' 카테고리의 다른 글

자동공간, 정적 공간 , 동적 공간(힙)(automatic ,static ,dynamic )  (0) 2020.09.08
strcpy, strcnpy 차이  (0) 2020.09.08
enum의 주의점  (0) 2020.09.02
union, struct 차이  (0) 2020.09.02
문자열 string c++  (0) 2020.08.31

enum spectrum{red, orange, yellow, green, blue , violet, indigo, ultrviolet{

spectrum band;

band=blue; // 맞음

 

band =2000; // 틀림

 

band=orange;

++band; //틀림 될수도 있지만 일반적으로 위험하며 이식성을 높이기위해 사용해선안된다.

 

band=orange+red;//틀림

 

int color =blue; //맞다

band=3;//틀리다 

color=3+red //맞다

 

band=spectrum(3); // 맞다

band=spectrum(40003);//미확정 

 

'프로그래밍언어 > C++' 카테고리의 다른 글

strcpy, strcnpy 차이  (0) 2020.09.08
문자열 복사와 대입  (0) 2020.09.08
union, struct 차이  (0) 2020.09.02
문자열 string c++  (0) 2020.08.31
부동 소수점수  (0) 2020.08.28

struct asd{

 int val;

  float dd;

  double sdk;

 

}; ->모든 변수를 한번에 저장 

 

union asd{

 int val;

  float dd;

  double sdk;

 

}; -> union asd중 int, float ,double 중 하나만 저장 

ex)

union asd example;

example.val=10; //10 저장

example.dd=15.0f;//15 저장 int 형 10 소실 

 

union의 크기는 가장 큰 맴버의 크기가 됨 

즉 union의 사용이유는 여러가지 데이터형을 사용할 수는 있지만 이들을 동시에 

사용할수 없을때, union을 사용하여 메모리를 절약할수잇다.

union은 일반적으로 메모리 공간에 저장된다 (반드시 그런것은 아니다)

 

 

 

 

'프로그래밍언어 > C++' 카테고리의 다른 글

문자열 복사와 대입  (0) 2020.09.08
enum의 주의점  (0) 2020.09.02
문자열 string c++  (0) 2020.08.31
부동 소수점수  (0) 2020.08.28
char, unsigned char,signed char  (0) 2020.08.28

char dog[8]={'b','e','a','u'};// 문자열이 아니다

char dog[8]={'b','e','a','u','\0'};// 문자열이다.

string dog="beau";// 문자열이다.

 

char dog[5]="beau";//\0을 저장한다.

char dog[]="beau"//컴파일러가 알아서 처리

큰따옴표로 묶인 문자열은 끝내기 널 문자를 암시적으로 가짐

'프로그래밍언어 > C++' 카테고리의 다른 글

enum의 주의점  (0) 2020.09.02
union, struct 차이  (0) 2020.09.02
부동 소수점수  (0) 2020.08.28
char, unsigned char,signed char  (0) 2020.08.28
Hash STL  (0) 2020.04.01

+ Recent posts