Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2015
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.56 KB | None | 0 0
  1. day19
  2.  
  3. *연산자 중복 함수
  4. 클래스 안에서 operator 연산자()
  5. operator+ ()
  6. operator<< ()
  7. operator>> ()
  8. 연산자를 다른 용도로 정의해서 사용하겠다.
  9.  
  10. 클래스의 객체를 만든 후 객체 연산자 사용하면..
  11. operator연산자() { 정의 ; } 정의된 내용을 실행한다.
  12. std::cout<< iostream영역에 cout 객체가 << 연산자를 이용해서 출력한다.
  13. << 모양이 맘에 들어서 사용한 것이다.
  14. <<를 재정의 해 놓은 것이다.
  15.  
  16. 객체.multi(b)
  17. 객체*객체
  18.  
  19. 객체(a,b정수변수)*객체
  20. a멤버*a멤버 b멤버*b멤버
  21.  
  22. 각 객체의 멤버변수를 불러와서 곱셈을 수행해라 -> 라고 정의!
  23. operator*(객체)
  24.  
  25. 1. 타이핑 하기 편리하다.
  26. 2. 연산자의 내용과 일치한다. << 왼쪽으로 보내라.
  27.  
  28. 객체
  29. a.multi(b).add(c.multi(d))
  30. 중복정의를 해서
  31. (a*b)+(c*d) // 그런데 각 객체는 x, y라는 멤버가 있다..
  32. // 어떻게 *과 +를 시킬 것이냐? -> 정의!!
  33.  
  34.  
  35.  
  36. *템플릿
  37. 여러 타입의 내용을 대체해서 사용할 수 있는 기법
  38. 일반 변수는 물론이도 클래스의 멤버변수에게도 적용할 수 있다.
  39.  
  40. -----
  41. 데이터(자료)를 저장하고 관리할 수 있는 기법 : 자료구조
  42.  
  43. *배열의 삽입 삭제 :
  44. insert()
  45. -----------------
  46. memmove(1,2,3) 매개변수 설정
  47. delete()
  48.  
  49. *리스트 : 1차원으로 데이터를 배열처럼 나열해서 관리하는 것
  50. 배열 리스트, 연결 리스트
  51.  
  52. *스택 : FIFL 선입후출 먼저 입력한 데이터는 가장 나중에 나온다.
  53. 가장 나중에 입력한 데이터가 가장 먼저 나온다.
  54. (설거지할때 접시를 한장씩 쌓아 올려놓는다. 그리고 음식을 담기 위해
  55. 접시를 꺼내 써야 하는데 제일 마지막에 설거지한 그릇을 가장 먼저 사용하게 된다)
  56.  
  57. *큐 : 접시를 쌓아 올린게 아니라 옆으로 한장씩 세워 놓은 것
  58. -> 제일 먼저 입력한 내용
  59. | | | | | | -> 먼저 입력한 접시를 사용한다.
  60. <= 가장 나중에 설거지 한것.
  61.  
  62. -----------------------------------------------------------------
  63.  
  64. #include <iostream>
  65. using namespace std;
  66.  
  67. class Point {
  68. int x,y;
  69. public:
  70. Point(int x, int y)
  71. {
  72. this->x=x;
  73. this->y=y;
  74. }
  75. void showResult();
  76. void movePoint(int);
  77. };
  78.  
  79. void Point::movePoint(int n)
  80. {
  81. this->x += n;
  82. this->y += n;
  83. }
  84.  
  85. void Point::showResult()
  86. {
  87. cout << "x : " << x << " y : " << y << " 합 : " << (x+y) << endl;
  88. }
  89.  
  90. void main()
  91. {
  92. Point p(3,4);
  93. //p의 좌표에서 10씩 이동해라 즉 13,14로 만들어라..
  94. //p=p+10;
  95. p.movePoint(10);
  96. p.showResult();
  97. }
  98.  
  99. --------------------------------------------------------------
  100.  
  101. #include <iostream>
  102. using namespace std;
  103.  
  104. class Point {
  105. int x,y;
  106. public:
  107. Point(int x, int y)
  108. {
  109. this->x=x;
  110. this->y=y;
  111. }
  112. void showResult();
  113. void movePoint(int);
  114. //+를 정의하겠다.
  115. Point& operator+(int);
  116. Point& operator=(Point &);
  117. int getX()
  118. { return x; }
  119. int getY()
  120. { return y; }
  121. };
  122.  
  123. void Point::movePoint(int n)
  124. {
  125. this->x += n;
  126. this->y += n;
  127. }
  128.  
  129. void Point::showResult()
  130. {
  131. cout << "x : " << x << " y : " << y << " 합 : " << (x+y) << endl;
  132. }
  133.  
  134. Point& Point::operator=(Point &p) // call-by-r
  135. {
  136. this->x = p.x;
  137. this->y = p.y;
  138. return *this;
  139. }
  140.  
  141. Point& Point::operator+(int n) // 객체+정수 --> 객체의 멤버+정수
  142. {
  143. this->x += n;
  144. this->y += n;
  145. return *this;
  146. }
  147.  
  148. void main()
  149. {
  150. Point p(3,4);
  151. //p의 좌표에서 10씩 이동해라 즉 13,14로 만들어라..
  152. p = p+10; // +를 재정의 해서 사용하겠다.
  153. //p.movePoint(10);
  154. p.showResult();
  155. }
  156.  
  157. ----------------------------------------------------------
  158.  
  159. #include <iostream>
  160. using namespace std;
  161. // 템플릿 : 틀 (공통된 양식)
  162. // c++ 컴파일러가 함수나 클래스의 자료형에 대해서 일정한 틀을 만들어 놓고
  163. // 여러 종류의 타입을 사용할 수 있도록 만들어 놓는 기법
  164.  
  165. // 임의의 타입을 사용할 때 그에 맞게 변형되는 것
  166. // void add(int n) {}
  167. // void add(double n) {}
  168. // void add(char n) {} // int, double, char --> 템플릿으로 설정 임의의 타입을
  169. // 아무거나 대입해도 된다. 그때마다 해당 타입으로 변경된다.
  170. // void add(T n){} // 보통 대문자 T를 사용해서 템플릿 타입을 적용한다. (다른 알파벳도 가능)
  171. // 이제부터 T는 int도 되고 double, char 등 타입이
  172. // 그때 그때 변경된다. 따라서 오버로딩 할 필요 없다.
  173. //형식] template <typename T>
  174.  
  175. // 다양한 자료형 틀을 제공하겠다.
  176. // 자료형 템플릿을 T라고 해야지.
  177. template <typename T>
  178. /*int square(int n){
  179. return n*n;
  180. }
  181. double square(double n){
  182. return n*n;
  183. }
  184. long square(long n){
  185. return n*n;
  186. }
  187. float square(float n){
  188. return n*n;
  189. }*/
  190. T square (T n) // <-- a가 들어오면 T는 int로 바뀐다.
  191. { // f가 들어오면 T는 float으로 바뀐다.
  192. return n*n;
  193. }
  194.  
  195. void main()
  196. {
  197. int a = 10;
  198. double b = 1.1;
  199. long c = 2;
  200. float f = 4.f; // 4.0
  201. //char c = 'a';
  202.  
  203. // 각 자료형의 제곱을 구하기 위한 함수를 만든다.
  204. cout << "square int : " << square(a) << endl;
  205. cout << "square double : " << square(b) << endl;
  206. cout << "square long : " << square(c) << endl;
  207. cout << "square float : " << square(f) << endl;
  208. }
  209.  
  210. ------------------------------------------------------------------------
  211.  
  212. #include <iostream>
  213. using namespace std;
  214.  
  215. //클래스 멤버에게 템플릿을 적용해 보자
  216. //1. 멤버 함수의 프로토 타입 선언시
  217. // "매번" 정의부에서는 타입명을 밝혀 줘야 한다.
  218. //2. 템플릿은 컴파일할때 타입이 정해지는 것이 아니라.. 실행을 해 봐야만..
  219. // (어떤 데이터가 대입되느냐)에 따라 실행시 리턴타입이 결정되기 때문이다.
  220.  
  221. class Test{
  222. int value; //int형으로 사용!
  223. public:
  224. Test(){}
  225. Test(int v){ value = v; }
  226. void setValue(int v){ value = v; }
  227. int getValue() { return value; }
  228. };
  229.  
  230. void main(){
  231. Test t(10);
  232. cout << "t.value : " << t.getValue() << endl;
  233. Test t1(1.1);
  234. cout << "t1.value : " << t1.getValue() << endl;
  235. }
  236.  
  237. --------------------------------------------------------------------------
  238.  
  239. #include <iostream>
  240. using namespace std;
  241.  
  242. //멤버변수의 int 대신 template을 적용
  243. template <typename T>
  244. class Test{
  245. T value; //int형으로 사용!
  246. public:
  247. Test(){}
  248. Test(T v){
  249. cout << "생성자에서 매개변수 값 : " << v << endl;
  250. value = v;
  251. }
  252. void setValue(T v){ value = v; }
  253. T getValue() { return value; }
  254. };
  255.  
  256. void main(){
  257. //멤버변수의 타입을 뭘로 결정할지 알려줘야 한다.
  258. Test<int> t(10);
  259. cout << "t.value : " << t.getValue() << endl;
  260. Test<double> t1(4.5);
  261. cout << "t1.value : " << t1.getValue() << endl;
  262. t1.setValue(9.5);
  263. cout << "set후 t1.value : " << t1.getValue() << endl;
  264. }
  265.  
  266. --------------------------------------------------------------------------
  267.  
  268. #include <iostream>
  269. using namespace std;
  270.  
  271. //멤버변수의 int 대신 template을 적용
  272. //멤버함수의 프로토타입과 정의부에서 매번 템플릿을 적어 줘야 한다.
  273. template <typename T>
  274. class Test
  275. {
  276. T value; //int형으로 사용!
  277. public:
  278. Test(){}
  279. Test(T v);
  280. void setValue(T v);
  281. T getValue();
  282. };
  283.  
  284. template <typename T>
  285. Test<T>::Test(T v)
  286. {
  287. cout << "생성자에서 매개변수 값 : " << v << endl;
  288. value = v;
  289. }
  290.  
  291. template <typename T>
  292. void Test<T>::setValue(T v){ value = v; }
  293.  
  294. template <typename T>
  295. T Test<T>::getValue() { return value; }
  296.  
  297. void main()
  298. {
  299. //멤버변수의 타입을 뭘로 결정할지 알려줘야 한다.
  300. Test<int> t(10);
  301. cout << "t.value : " << t.getValue() << endl;
  302. Test<double> t1(4.5);
  303. cout << "t1.value : " << t1.getValue() << endl;
  304. t1.setValue(9.5);
  305. cout << "set후 t1.value : " << t1.getValue() << endl;
  306. }
  307.  
  308. ----------------------------------------------------------------------
  309.  
  310. #include <iostream>
  311. using namespace std;
  312.  
  313. //배열의 삽입 삭제
  314. //memmove() <--- #include <string.h>
  315. // 원하는 위치로 이동해서 데이터를 옮긴다.
  316.  
  317. char ar[16] = "abcdef"; // 문자열 7바이트
  318. // strlen(ar) = 6..
  319.  
  320. void insert(int idx, char ch)
  321. { // 0 1 2 3 4 5 6
  322. // abc+ | | + def
  323. memmove(ar+idx+1,ar+idx,strlen(ar)-idx+1);
  324. // 4까지 3부터 4까지 (한칸 이동해라)
  325. ar[idx] = ch;
  326. //ar 3번째 공간 비었는데 그 공간에 ch를 대입시켜라!
  327. }
  328.  
  329. void main()
  330. {
  331. cout << "처음 ar배열의 내용 : " << ar << endl;
  332. // t를 0,1,2,"3"에 삽입하려고 한다.
  333. insert(3,'t');
  334. cout << "t 삽입 이후 : " << ar << endl;
  335. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement