-오버로딩 (중복 함수)
-> 함수이름과 기능은 같지만 매개변수 자료형만 다른 여러 개의 함수들을 정의하는 것
-오버라이딩 (함수 재정의)
-> 상속받은 멤버함수를 자식클래스 입맛에 맞춰 재정의한 함수
[템플릿 함수]
-함수를 찍어내기 위한 형틀
-> 함수이름과 기능은 같지만 매개변수 자료형을 다르게 받고 싶을 때,
여러 개의 함수를 만들지 않고, 하나의 함수틀을 정의하여
(원하는 타입 인수 호출하면 ‘템플릿 함수’ 가 T를 인수 타입에 맞춰 치환되어
함수 기능 사용을 자유롭게 할 수 있도록 만든 것)
template <typename T> //T 가 타입 이름으로 사용된다는 것을 컴파일러에게 알려주기 위한 문장 (없으면 컴파일오류)
T get_max(T x, T y) {
}
-> 실제 함수를 정의해준 것X
-> 함수 생성틀만 정의한 것 O 실제함수는 인수주고 함수 호출하는 순간에 생성됨
//11주차 수업내용 -템플릿 함수틀을 사용
#include<iostream>
#include<string>
using namespace std;
template <typename T> //함수템플릿형 정의
T F_findMax(T num1, T num2) { //템플릿 정의
T result;
if (num1 >= num2) result = num1;
if (num1 < num2) result = num2;
return result;
}
int main() {
int i = 100, j = 200, k;
double di = 100.5, dj = 200.7, dk;
k = F_findMax(i, j); //정수 인수로 템플릿 호출
dk = F_findMax(di, dj); //더블형 인수로 템플릿 호출
getchar();
getchar();
return 0;
}
[클래스 템플릿]
: 클래스를 찍어내는 틀
= 이 기능을 사용하면 여러 자료형에 대응하면 여러 개의 클래스들을 하나의 클래스로 만들 수 있다.
-하나의 클래스 내부에서 다루는 데이터 타입을 T(타입매개변수) 로 표시하면 ‘클래스 템플릿’이 된다,
-하나의 클래스에 여러 타입을 적용하여 사용할 수 있다.
templete <typename T> // 클래스 템플릿 정의
class Box {
..//내부 데이터 타입은 전부 T처리 .
}
int main() {
... //클래스이름 뒤 <자료형> 붙이면 정의된 클래스 템플릿 사용 O
Box <int> a;
Box <char> b;
Box <float> c;
Box <string> d;
...
}
//11주차 수업내용 -클래스 템플릿 사용 <타입매개변수 T 하나만 사용하는 경우>
#include<iostream>
#include<string>
using namespace std;
template <typename T>
class NC { //클래스 템플릿 정의
private:
T value;
public:
T F_GetValue() {
return value;
}
void F_SetValue(T pValue) {
value = pValue;
}
};
int main() {
NC<int> NCIobject; //int형 NC클래스
NC<double> NCDobject; //double형 NC클래스
NCIobject.F_SetValue(1000);
cout << "Value of 정수형" << NCIobject.F_GetValue() << endl;
NCDobject.F_SetValue(2000.5);
cout << "Value of 더블형 " << NCIobject.F_GetValue() << endl;
getchar();
getchar();
return 0;
}
[두 개 이상의 T 매개변수 갖는 경우]
//11주차 수업내용 -클래스 템플릿 <타입매개변수 2개 이상 >
//즉. 인수, 반환형 모두 통일되지 않고, 제각각일 경우의 수 고려
#include<iostream>
#include<string>
using namespace std;
//인수1, 인수2, 반환타입 순서
template <typename T1, typename T2, typename T3>
class NewClassC {
private:
T3 avg;
public:
T3 F_Average(T1 a, T2 b) {
avg = (T3) (a + b) / 2.0;
return avg;
}
};
int main() {
NewClassC <int, int, double> NCIobject; //두 정수 인수주고 더블형 평균 반환
NewClassC <double, double, double> NCDobject; //두 더블형 인수 주고 더블형 평균 반환
cout << "Int Average = " << NCIobject.F_Average(200, 300) << endl;
cout << "Double Average = " << NCDobject.F_Average(400.4, 800.8) << endl;
getchar();
getchar();
return 0;
}
[STL] : Standart Template Library
: 테플릿 형태로 만들어진 함수들을 라이브러리 내부에 가지고 있다. C++ 표준
<stl 사용 시 포함해야 할 헤더파일>
#include <vector>
#include <algorithm>
[벡터] : 템플릿으로 정의된 자료구조 (배열과 비슷하지만 크기 자유)
vector < 자료형 >A;
[벡터 관련 연산]
A.push_back(i);
A.pop_back();
A.clear();
A.size();
A[i];
sort(A.begin(), A.end() )
//11주차 - STL, 벡터
#include<iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector <int> A; //int형 벡터 선언
int i, j, k;
for (i = 0; i <= 4; i++) {
cin >> j;// 사용자에게 임의의 숫자 5개 받아서
A.push_back(j);//백터 끝에 차례로 삽입
}
sort(A.begin(), A.end()); //벡터 시작~끝 인덱스까지 요소 오름차순 정렬
for (i = 0; i <= A.size()-1 ; i++) { //순서대로 출력(오름차순)
cout << A[i] << ", ";//출력
}
for (i = A.size() - 1; i >= 0; i--) {//역순으로 출력(내림차순이됨)
cout << A[i] << ", ";
}
}
'C++, C언어 > [문법]_C++' 카테고리의 다른 글
C++_12주차_정리 (0) | 2021.12.20 |
---|---|
C++_10주차_정리 (0) | 2021.12.20 |
C++_9주차_정리 (0) | 2021.12.20 |
C++_8주차_정리 (0) | 2021.12.20 |
C++_7주차_정리 (0) | 2021.12.20 |