실습 1 13주차 되새김질 하기(static)
실습 2
#include <iostream>
using std::cout;
class Point {
int x;
int y;
static int count; //선언
public:
Point() { cout << ++count; }
~Point() { cout << --count; }
};
//int Point::count = 0; //정의
int main()
{
Point p1, p2, p3;
return 0;
}
스태틱 변수를 선언하게 되면 정의도 같이 해줘야 한다. 정의를 안하게 되면 오류가 생김.
실습 3 템플릿
python, c#, java, swift, typescript 와 같은 프로그래밍 언어에서 사용한다 이 외에도 다른 프로그래밍 언어들이 많음.
#include <iostream>
using std::cout;
using std::endl;
template <class T> T Max(T i, T j)
{
return i > j ? i : j;
}
int main()
{
cout << "Max값은=" << Max(1, 2) << endl;
cout << "Max값은=" << Max(7.5, 3.6) << endl;
cout << "Max값은=" << Max('A', 'B');
return 0;
}
#include <iostream>
using std::cout;
using std::endl;
template <typename T1, class T2> void fun(T1 x, T2 y)
{ // 두 개의 매개변수 자료형이 T1과 T2로 다르다.
cout << x << " " << y << endl;
}
int main()
{
fun("Han", 30); // T1은 문자열(const char *),T2는 정수형(int)
fun(25, 50.5); // T1은 정수형(int), T2는 double형
fun(25.5, 20.7);
fun('a', 'b');
return 0;
}
실습 4
template을 이용한 제네릭 클래스
template으로 만들기 전에 비슷한 class가 3개로 있는데 template로 바꾸기.
#include <iostream>
using std::cout;
using std::endl;
class CCC1
{
int x;
int y;
public:
CCC1(int xx, int yy) { x = xx; y = yy; }
void Print() { cout << x << ',' << y << endl; }
};
class CCC2
{
double x;
double y;
public:
CCC2(double xx, double yy) { x = xx; y = yy; }
void Print() { cout << x << ',' << y << endl; }
};
class CCC3
{
char x;
const char* y;
public:
CCC3(char xx, const char* yy) { x = xx; y = yy; }
void Print() { cout << x << ',' << y << endl; }
};
int main()
{
CCC1 c1(10, 20);
CCC2 c2(3.5, 5.5);
CCC3 c3('I', "Love You!");
c1.Print();
c2.Print();
c3.Print();
return 0;
}
바꾸기 중반
#include <iostream>
using std::cout;
using std::endl;
template <typename T1, typename T2,>
class CCC1
{
T1 x;
T2 y;
public:
CCC1(T1 xx, T2 yy) { x = xx; y = yy; }
void Print() { cout << x << ',' << y << endl; }
};
int main()
{
CCC1 c1(10, 20);
CCC1 c2(3.5, 5.5);
CCC1 c3('I', "Love You!");
c1.Print();
c2.Print();
c3.Print();
return 0;
}
바꾸고 난 후
#include <iostream>
using std::cout;
using std::endl;
using std::string;
template <typename T1, typename T2>
class CCC1
{
T1 x;
T2 y;
public:
CCC1(T1 xx, T2 yy) { x = xx; y = yy; }
void Print() { cout << x << ',' << y << endl; }
};
int main()
{
CCC1<int, int> c1(10, 20);
CCC1<double, double> c2(3.5, 5.5);
CCC1<char, char const* > c3('I', "Love You!");
c1.Print();
c2.Print();
c3.Print();
return 0;
}
자료형을 class다음에 <>를 이용해서 나중에 자료형을 넣는다.
실습 5 STL(Standard Template Library)
실습 6 Vector 컨테이너
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> x; //int x[10]와 차이
// 여러 개 int형을 가지고 노는 배열 공간을 만들고 싶어요
x.push_back(5);
x.push_back(1);
x.push_back(2);
x.push_back(12);
for (int i = 0; i < x.size(); i++)
cout << x[i] << endl;
return 0;
}
실습 7 예외처리
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void Div(double ja, double mo) {
cout << "결과" << ja / mo << endl;
}
int main()
{
double x, y;
cout << "분자를 입력하세요=";
cin >> x;
cout << "분모를 입력하세요=";
cin >> y;
Div(x, y);
return 0;
}
예외처리 하는방법 1단계
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void Div(double ja, double mo) {
try {
cout << "결과" << ja / mo << endl; // 1단계
}
}
int main()
{
double x, y;
cout << "분자를 입력하세요=";
cin >> x;
cout << "분모를 입력하세요=";
cin >> y;
Div(x, y);
return 0;
}
예외가 발생할 수 있는 소스에 try로 묶는다.
2단계
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void Div(double ja, double mo) {
try { // 1단계
if (mo==0) throw mo; // 2단계
cout << "결과" << ja / mo << endl;
}
}
int main()
{
double x, y;
cout << "분자를 입력하세요=";
cin >> x;
cout << "분모를 입력하세요=";
cin >> y;
Div(x, y);
return 0;
}
2단계에서 mo값이 0이 되면 mo 예외 발생하게 되면 예외 발생인 변수를 던진다 해서 throw 키워드를 사용
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void Div(double ja, double mo) {
try { // 1단계
if (mo == 0) throw mo; // 2단계
cout << "결과" << ja / mo << endl;
}
catch(double){//3단계 Div 에서 선언한 자료형을 사용해야함
cout << "분모 0 오류 : 0으로 나눌 수 없음.";
}
catch (int) {
cout << "오류 : 영으로 나눌 수 없음";
}
}
int main()
{
double x, y;
cout << "분자를 입력하세요=";
cin >> x;
cout << "분모를 입력하세요=";
cin >> y;
Div(x, y);
return 0;
}
catch는 여러개 사용할 수 있지만 catch(자료형) 자료형 부분에서 위에 함수 선언한 부분에서 똑같은 자료형으로 사용해야한다. 안그럼 오류생김.
'C++' 카테고리의 다른 글
C++ 15주차 (0) | 2023.12.14 |
---|---|
C++ 프로그래밍 13주차 (0) | 2023.11.30 |
C++프로그래밍 12주차 (0) | 2023.11.23 |
C++ 프로그래밍 11주차 (0) | 2023.11.16 |
C++ 10주차 (1) | 2023.11.09 |