Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- day19
- *연산자 중복 함수
- 클래스 안에서 operator 연산자()
- operator+ ()
- operator<< ()
- operator>> ()
- 연산자를 다른 용도로 정의해서 사용하겠다.
- 클래스의 객체를 만든 후 객체 연산자 사용하면..
- operator연산자() { 정의 ; } 정의된 내용을 실행한다.
- std::cout<< iostream영역에 cout 객체가 << 연산자를 이용해서 출력한다.
- << 모양이 맘에 들어서 사용한 것이다.
- <<를 재정의 해 놓은 것이다.
- 객체.multi(b)
- 객체*객체
- 객체(a,b정수변수)*객체
- a멤버*a멤버 b멤버*b멤버
- 각 객체의 멤버변수를 불러와서 곱셈을 수행해라 -> 라고 정의!
- operator*(객체)
- 1. 타이핑 하기 편리하다.
- 2. 연산자의 내용과 일치한다. << 왼쪽으로 보내라.
- 객체
- a.multi(b).add(c.multi(d))
- 중복정의를 해서
- (a*b)+(c*d) // 그런데 각 객체는 x, y라는 멤버가 있다..
- // 어떻게 *과 +를 시킬 것이냐? -> 정의!!
- *템플릿
- 여러 타입의 내용을 대체해서 사용할 수 있는 기법
- 일반 변수는 물론이도 클래스의 멤버변수에게도 적용할 수 있다.
- -----
- 데이터(자료)를 저장하고 관리할 수 있는 기법 : 자료구조
- *배열의 삽입 삭제 :
- insert()
- -----------------
- memmove(1,2,3) 매개변수 설정
- delete()
- *리스트 : 1차원으로 데이터를 배열처럼 나열해서 관리하는 것
- 배열 리스트, 연결 리스트
- *스택 : FIFL 선입후출 먼저 입력한 데이터는 가장 나중에 나온다.
- 가장 나중에 입력한 데이터가 가장 먼저 나온다.
- (설거지할때 접시를 한장씩 쌓아 올려놓는다. 그리고 음식을 담기 위해
- 접시를 꺼내 써야 하는데 제일 마지막에 설거지한 그릇을 가장 먼저 사용하게 된다)
- *큐 : 접시를 쌓아 올린게 아니라 옆으로 한장씩 세워 놓은 것
- -> 제일 먼저 입력한 내용
- | | | | | | -> 먼저 입력한 접시를 사용한다.
- <= 가장 나중에 설거지 한것.
- -----------------------------------------------------------------
- #include <iostream>
- using namespace std;
- class Point {
- int x,y;
- public:
- Point(int x, int y)
- {
- this->x=x;
- this->y=y;
- }
- void showResult();
- void movePoint(int);
- };
- void Point::movePoint(int n)
- {
- this->x += n;
- this->y += n;
- }
- void Point::showResult()
- {
- cout << "x : " << x << " y : " << y << " 합 : " << (x+y) << endl;
- }
- void main()
- {
- Point p(3,4);
- //p의 좌표에서 10씩 이동해라 즉 13,14로 만들어라..
- //p=p+10;
- p.movePoint(10);
- p.showResult();
- }
- --------------------------------------------------------------
- #include <iostream>
- using namespace std;
- class Point {
- int x,y;
- public:
- Point(int x, int y)
- {
- this->x=x;
- this->y=y;
- }
- void showResult();
- void movePoint(int);
- //+를 정의하겠다.
- Point& operator+(int);
- Point& operator=(Point &);
- int getX()
- { return x; }
- int getY()
- { return y; }
- };
- void Point::movePoint(int n)
- {
- this->x += n;
- this->y += n;
- }
- void Point::showResult()
- {
- cout << "x : " << x << " y : " << y << " 합 : " << (x+y) << endl;
- }
- Point& Point::operator=(Point &p) // call-by-r
- {
- this->x = p.x;
- this->y = p.y;
- return *this;
- }
- Point& Point::operator+(int n) // 객체+정수 --> 객체의 멤버+정수
- {
- this->x += n;
- this->y += n;
- return *this;
- }
- void main()
- {
- Point p(3,4);
- //p의 좌표에서 10씩 이동해라 즉 13,14로 만들어라..
- p = p+10; // +를 재정의 해서 사용하겠다.
- //p.movePoint(10);
- p.showResult();
- }
- ----------------------------------------------------------
- #include <iostream>
- using namespace std;
- // 템플릿 : 틀 (공통된 양식)
- // c++ 컴파일러가 함수나 클래스의 자료형에 대해서 일정한 틀을 만들어 놓고
- // 여러 종류의 타입을 사용할 수 있도록 만들어 놓는 기법
- // 임의의 타입을 사용할 때 그에 맞게 변형되는 것
- // void add(int n) {}
- // void add(double n) {}
- // void add(char n) {} // int, double, char --> 템플릿으로 설정 임의의 타입을
- // 아무거나 대입해도 된다. 그때마다 해당 타입으로 변경된다.
- // void add(T n){} // 보통 대문자 T를 사용해서 템플릿 타입을 적용한다. (다른 알파벳도 가능)
- // 이제부터 T는 int도 되고 double, char 등 타입이
- // 그때 그때 변경된다. 따라서 오버로딩 할 필요 없다.
- //형식] template <typename T>
- // 다양한 자료형 틀을 제공하겠다.
- // 자료형 템플릿을 T라고 해야지.
- template <typename T>
- /*int square(int n){
- return n*n;
- }
- double square(double n){
- return n*n;
- }
- long square(long n){
- return n*n;
- }
- float square(float n){
- return n*n;
- }*/
- T square (T n) // <-- a가 들어오면 T는 int로 바뀐다.
- { // f가 들어오면 T는 float으로 바뀐다.
- return n*n;
- }
- void main()
- {
- int a = 10;
- double b = 1.1;
- long c = 2;
- float f = 4.f; // 4.0
- //char c = 'a';
- // 각 자료형의 제곱을 구하기 위한 함수를 만든다.
- cout << "square int : " << square(a) << endl;
- cout << "square double : " << square(b) << endl;
- cout << "square long : " << square(c) << endl;
- cout << "square float : " << square(f) << endl;
- }
- ------------------------------------------------------------------------
- #include <iostream>
- using namespace std;
- //클래스 멤버에게 템플릿을 적용해 보자
- //1. 멤버 함수의 프로토 타입 선언시
- // "매번" 정의부에서는 타입명을 밝혀 줘야 한다.
- //2. 템플릿은 컴파일할때 타입이 정해지는 것이 아니라.. 실행을 해 봐야만..
- // (어떤 데이터가 대입되느냐)에 따라 실행시 리턴타입이 결정되기 때문이다.
- class Test{
- int value; //int형으로 사용!
- public:
- Test(){}
- Test(int v){ value = v; }
- void setValue(int v){ value = v; }
- int getValue() { return value; }
- };
- void main(){
- Test t(10);
- cout << "t.value : " << t.getValue() << endl;
- Test t1(1.1);
- cout << "t1.value : " << t1.getValue() << endl;
- }
- --------------------------------------------------------------------------
- #include <iostream>
- using namespace std;
- //멤버변수의 int 대신 template을 적용
- template <typename T>
- class Test{
- T value; //int형으로 사용!
- public:
- Test(){}
- Test(T v){
- cout << "생성자에서 매개변수 값 : " << v << endl;
- value = v;
- }
- void setValue(T v){ value = v; }
- T getValue() { return value; }
- };
- void main(){
- //멤버변수의 타입을 뭘로 결정할지 알려줘야 한다.
- Test<int> t(10);
- cout << "t.value : " << t.getValue() << endl;
- Test<double> t1(4.5);
- cout << "t1.value : " << t1.getValue() << endl;
- t1.setValue(9.5);
- cout << "set후 t1.value : " << t1.getValue() << endl;
- }
- --------------------------------------------------------------------------
- #include <iostream>
- using namespace std;
- //멤버변수의 int 대신 template을 적용
- //멤버함수의 프로토타입과 정의부에서 매번 템플릿을 적어 줘야 한다.
- template <typename T>
- class Test
- {
- T value; //int형으로 사용!
- public:
- Test(){}
- Test(T v);
- void setValue(T v);
- T getValue();
- };
- template <typename T>
- Test<T>::Test(T v)
- {
- cout << "생성자에서 매개변수 값 : " << v << endl;
- value = v;
- }
- template <typename T>
- void Test<T>::setValue(T v){ value = v; }
- template <typename T>
- T Test<T>::getValue() { return value; }
- void main()
- {
- //멤버변수의 타입을 뭘로 결정할지 알려줘야 한다.
- Test<int> t(10);
- cout << "t.value : " << t.getValue() << endl;
- Test<double> t1(4.5);
- cout << "t1.value : " << t1.getValue() << endl;
- t1.setValue(9.5);
- cout << "set후 t1.value : " << t1.getValue() << endl;
- }
- ----------------------------------------------------------------------
- #include <iostream>
- using namespace std;
- //배열의 삽입 삭제
- //memmove() <--- #include <string.h>
- // 원하는 위치로 이동해서 데이터를 옮긴다.
- char ar[16] = "abcdef"; // 문자열 7바이트
- // strlen(ar) = 6..
- void insert(int idx, char ch)
- { // 0 1 2 3 4 5 6
- // abc+ | | + def
- memmove(ar+idx+1,ar+idx,strlen(ar)-idx+1);
- // 4까지 3부터 4까지 (한칸 이동해라)
- ar[idx] = ch;
- //ar 3번째 공간 비었는데 그 공간에 ch를 대입시켜라!
- }
- void main()
- {
- cout << "처음 ar배열의 내용 : " << ar << endl;
- // t를 0,1,2,"3"에 삽입하려고 한다.
- insert(3,'t');
- cout << "t 삽입 이후 : " << ar << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement