C++_11주차_정리

728x90

-오버로딩 (중복 함수)

-> 함수이름과 기능은 같지만 매개변수 자료형만 다른 여러 개의 함수들을 정의하는 것

 

-오버라이딩 (함수 재정의)

-> 상속받은 멤버함수를 자식클래스 입맛에 맞춰 재정의한 함수

 

[템플릿 함수]

-함수를 찍어내기 위한 형틀

-> 함수이름과 기능은 같지만 매개변수 자료형을 다르게 받고 싶을 때,

여러 개의 함수를 만들지 않고, 하나의 함수틀을 정의하여

(원하는 타입 인수 호출하면 템플릿 함수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] << ", ";
	}
}

728x90

'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