C/C++ Review<br />1<br />
1. 기본적자료형<br />
기본적인 자료형 (Data Type)<br />변수(variable): 자료를 저장하는 기억장소<br />- 모든 변수는 자료형이 지정되어 있어야 하고, 한번 지정된 자료형은 변할 수 없다.<br />- 변수를 사용하...
변수의 이름에대한규칙<br />중복된 이름의 변수를 사용할 수 없다.<br />변수 이름에는 알파벳, 숫자, 언더스코어(_)만 포함할 수 있다.<br />단, 숫자는 변수 이름의 첫 번째 글자로 사용할 수 없다.<br ...
변수의 이름을 붙일 경우<br />변수의 용도에 맞는 이름<br />예: StudentsNumber<br />변수내의 단어와 단어는 구분<br />예: StudentsNumber, student_number<br />필...
자료형의 종류<br />C++에서 제공하는 기본 타입들<br />
정수 타입 (Integers)<br />정수 타입별로 보관할 수 있는 값의 범위<br />10 진수, 8 진수, 16 진수의 표현<br />* 32비트 윈도우즈 시스템을 기준으로 한 값<br />int decimal =...
실수 타입(Floating points)<br />실수 타입별로 보관할 수 있는 값의 범위<br />* 32비트 윈도우즈 시스템을 기준으로 한 값<br />
문자 타입 (Characters)<br />문자 타입별로 보관할 수 있는 값의 범위<br />문자 타입도 결국은 숫자를 보관한다.<br />* 32비트 윈도우즈 시스템을 기준으로 한 값<br />
부울 타입 (Boolean)<br />부울 타입은 true 혹은 false의 값을 갖는다.<br />bool b1;<br />bool b2;<br />b1 = true;<br />b2 = false;<br />cout ...
형 변환<br />내부적 형 변환<br />암시적 형변환은 변수에 대한 처리 과정에서 자동적으로 발생하는 형변환이다. <br />이 때 값이 변할 수 있다. 예: 실수 타입에서 정수 타입으로 형변환 발생 시 소수점 이하...
상수<br />Define - 매크로<br />예) #define pi 3.14<br />const 자료형이름 상수이름 = 초기값; <br />예) const double pi = 3.14;    <br />
연산자<br />산술연산자   => 산술식<br />+. -, *, /, %, ++, --<br />관계연산자   => 관계식<br />>, >=, <, <=, ==, !=<br />논리연산자   => 논리식<br />...
논리 연산자 (Logical Operators)<br />논리 연산을 수행한다.<br />bool b1 = true;<br />bool b2 = false;<br />bool and  = b1 && b2;<br />bo...
관계연산자와 논리연산자<br />일반적으로 논리연산자는 관계연산자와 함께 사용한다.<br />관계연산자의 우선순위가 높으므로 먼저 수행된다.<br />int age = 20;	// 나이<br />bool male = t...
연산자의 축약형<br />연산자의 축약형을 사용해서 번거로운 코딩을 줄일 수 있다.<br />
연산중에 발생하는 형변환<br />두 피연산자의 타입이 다르다면, 두 피연산자 중에서 보다 큰 타입 쪽으로 형변환이 발생한다.<br />int 보다 작은 타입들은 int 혹은 unsigned int 타입으로 변환된다.<...
입출력 문 (input/output statement)<br />입력문<br />    cin >> 변수1 >> 변수2 >> … >>변수n<br />화면으로부터 자료를 입력<br />출력문<br />    cout<< ...
2. 제어구조(control structure)<br />
제어구조<br />판단 구조<br />if<br />if /else<br />반복 구조<br />for<br />While<br />do while<br />
if 문<br />문법 <br />if (조건)<br />문장<br />조건:<br />1. 관계식<br />식1 관계연산자 식2<br />관계 연산자:>,  >= , <, <=, ==, !=<br />2. 논리식<br...
if 문의 조건<br />조건의 예<br />(1) 관계식<br />a != 0<br />     a > b<br />     b*b > 4*a*c <br />(2) 논리식<br />a > b and b > c<br /...
시작<br />x, y,z<br />x<y<br />xy<br />y<z<br />yz<br />x<y<br />xy<br />x,y,z 출력<br />끝<br />if 문<br />예:<br />세 수를 입력하여...
if/else 문<br />문법<br />if (조건)<br />문장1<br />       else <br />문장2<br />문제: 세수를 입력하여 최대값을 출력하는 프로그램을 작성하시오<br />조건<br />참<...
if/else if …문<br />문법<br />if (조건1)<br />문장1<br />       else if (조건2)<br />문장2<br />       else if (조건3)<br />….<br />   ...
switch/case를 사용한 조건 비교<br />…<br />int grade;<br />level = score / 10;<br />switch( level )<br />{<br />case 10:<br />case...
exp1 ? exp2 : exp3<br />int a = 3;<br />int b = 5;<br />int c = a > b ? a : b;<br />Dangling(매달린) else<br />    if 문 안에 if...
참<br />조건<br />문장<br />거짓<br />sum =0;<br />i = 1;<br />참<br />i <= n<br />sum = sum + i<br />i = i + 1;<br />거짓<br />whil...
do/while 문<br />문법<br />do <br />문장<br />      while (조건)<br />문장<br />참<br />조건<br />거짓<br />
for 문<br />for(문장1; 조건; 문장2)<br />문장3;<br />문장1 –반복시작 전 초기화<br />조건 –반복 조건<br />문장3 - 반복 몸체<br />문장4 –조건과 관련된 문장으로, 몸체(문장3...
for 문<br />시작<br />N<br />예<br />N을 입력받아 N!을 출력하는 프로그램을 작성하라.<br />product =1;<br />i = 1;<br />#include <iostream><br />u...
루프 안에서의 break<br />루프(while, for)나 switch 블록 안에서 break 를 사용하면 블록 밖으로 실행의 흐름이 이동된다.<br />
반복문 안에서의 continue<br />continue는 루프의 나머지 부분을 무시하고 조건을 반복문의 조건을 점검하는 곳으로 점프하여 루프의 다음을 실행하도록 하는 명령어<br />예:<br />    void ma...
연속된 입력값의 처리 –표식을 이용<br />1) 입력의 마지막 값으로 입력으로 올 수 없는 값(표식: sentinel)을 사용<br />While loop 사용<br />성적들을 입력하여 평균을 구하는 프로그램을 작성...
연속된 입력값의 처리–자료개수를 이용<br />1) 입력자료의 개수를 처음에 입력<br />for loop 사용<br />성적들을 입력하여 평균을 구하는 프로그램을 작성하라.<br />성적들을 입력하여 최고성적과 최저성...
3. 배열 (Array)<br />
배열<br />의미<br />배열은 연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조로 그 사용이 간편<br />배열은 동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조<br />크기<br />...
배열 선언<br />Declaration of an array:<br />type arrayName[ arraySize ];<br />Example<br />int c[12];<br />arraySize must be ...
배열의원소(Elements of An Array)<br />배열의특정한 원소(혹은 위치)를 참조하려면 다음을 명시하여야 함<br />Name of the array (배열 이름)<br />Index of the elem...
Example<br />40<br />An array c has 12 elements ( c[0], c[1], … c[11] ); the value of c[0] is –45.<br />
배열 초기화 – 초기화 리스트 이용<br />Initializer list: items enclosed in braces ({}) and separated by commas.<br />Examples<br />int n...
배열 초기화 – 루프 이용<br />Using a loop to initialize the array’s elements<br />Declare array, specify number of elements<br />Us...
배열 이용<br />Usually use for loop to access each element of an array. <br />C++ has no array boundary checking<br />Referrin...
배열 이용 – Example 1<br />Example: 배열 원소들의 합<br />  const int arraySize = 6;<br />  int a [ arraySize ] = { 87, 69, 45, 45, 4...
45<br />4. 구조체<br />
46<br />구조체<br />구조체(structure)<br />여러 개의 자료형의 값들의 모임을 나타내는 자료형<br />예: 여러 사람의 학번, 이름, 학과를 저장하는 변수 선언<br />구조체를 사용하지 않은 경...
47<br />구조체 정의<br />구조체의 사용<br />구조체를 사용하기 위해서는 먼저 구조체의 자료 구조를 정의한다.<br />그 다음에 정의된 구조체의 자료형을 갖는 변수를 선언한다.<br />구조체 정의<br ...
48<br />구조체 변수 선언<br />구조체 정의 후 변수 선언<br />struct student person;<br />	struct student p1, p2;<br />구조체 정의와 함께 변수 선언<br />...
49<br />구조체 정의와 변수 선언과의 관계<br />구조체 정의          구조체 변수 선언<br />id<br />p1<br />struct student<br />name<br />id<br />dept<...
50<br />구조체 멤버 접근<br />구조체 멤버 접근:	구조체변수.멤버이름  (멤버연산자 .)<br />	person.id		person.name	    person.dept<br />	p1.id		p1.name	...
51<br />예제 (계속) <br />main()<br />{<br />struct point a, b;			/* 두 점을 위한 변수 */<br />	float dx, dy, distance;<br />a.x = 10...
52<br />중첩된 구조체<br />중첩된 구조체<br />구조체의 멤버로서 다른 구조체를 사용할 수 있음<br />struct triangle {			struct triangle {<br />		    struct ...
53<br />예제: 복소수 곱셈<br />복소수의 곱셈<br />(a+bi) (c+di) = (ac-bd) + (ad+bc)i<br />#include <iostream><br />struct complex {	/* ...
54<br />구조체의 치환과 비교<br />구조체의 치환은 허용됨<br />구조체의 모든 멤버들이 복사됨<br />구조체의 비교는 허용되지 않음<br />개별적으로 멤버 비교해야 함<br />	struct point ...
55<br />구조체 배열<br />구조체의 배열<br />여러 개의 같은 구조체 자료형의 모임을 나타내는 자료형<br />예: 10명의 학생의 자료를 입력 받아서 역순으로 출력<br />struct student {<...
5. 함수 (function)<br />
프로그래밍에서의 함수<br />왜 함수를 사용하는가?<br />프로그래밍 설계 전략<br />Divide-and-Conquer<br />어떤 문제를 해결하기 위해 여러 개의 작은 문제로 쪼개는 것.<br />사람이 일을...
함수 유형<br />라이브러리 함수<br />라이브러리 함수는 이미 정의되어 있고 컴파일되어 있음<br />표준 라이브러리 헤더 파일에서 원형을 제공<br />함수의 원형(prototype)에 맞게 호출<br />사용자...
함수 정의<br /><ul><li>프로그램은 하나 이상의 함수로 구성됨
함수정의−함수가 수행할 일을 기술한 C 코드
함수정의의 일반적인 형식</li></ul>{ <br />		declarations<br />		statements<br />      }<br />인자(parameter) 리스트<br /><ul><li> 이 함수가 가지...
 이 함수를 호출할 때에는 이 리스트에 맞게 </li></ul>    호출해야함<br /><ul><li> 이것이 void이면 인자를 갖지 않음을 나타냄</li></ul>반환형(return type)<br /><ul><l...
 이것이 void이면 반환하는 값이 없다는 </li></ul>  것을 나타냄<br />
함수 정의 - 예<br />예:<br />int max (int x, int y)<br />{<br />    if (x >y)<br />        return x;<br />    else<br />        ...
return 문장 <br /><ul><li>return 문</li></ul>(1)     형식     return 식;<br />의미 - 함수 결과로서 식의 값을 반환하고<br />                함수를  ...
함수에 자료를 전달하는 방법
실제인자 (actual parameter) </li></ul>     - 함수 사용에 있는 인자<br /><ul><li>형식인자 (formal parameter)</li></ul>     - 함수 정의에 있는 인자<br />
함수작성 예<br />Task: write ExchangeValue function that exchange the value of two parameters, both integers<br />   int x=10, ...
C/C++ function<br />void ExchangeValue(int a, int b)<br />{<br />inttmp;<br />tmp=a;<br />a=b;<br />b=tmp;<br />}<br />voi...
C++ Tips<br />65<br />CALLING<br />BLOCK<br />FUNCTION  CALLED<br />Pass-by-value sends a copyof the value of the actual  ...
C++ Tips<br />66<br />CALLING<br />BLOCK<br />FUNCTION  CALLED<br />Pass-by-reference sends the location<br />(memory addr...
Call-by-reference<br />Good for performance reason:  eliminate copying overhead<br />Called the same way as call-by-value<...
C/C++ function: call by reference<br />void ExchangeValue(int & a, int & b)<br />{<br />inttmp;<br />tmp=a;<br />a=b;<br /...
Passing Arrays as Parameters<br />In C/C++, arrays are always passed by reference<br />& is not used in the formal paramet...
constarray parameter <br />If the function is not supposed to change the array:<br />	you can protect the array from unint...
//  Pre:   values[0] through values[numOfValues-1] //           have been assigned//  Returns the sum of values[0] through...
6. 포인터 (pointer)<br />
Pointer Variable<br />A variable whose value is the address of a location in memory<br />i.e., a variable that points to s...
Assign Value to Pointer<br />74<br />int alpha;<br />int* intPointer;<br />intPointer = &alpha;<br />If alpha is at addres...
Pointer Types<br />75<br />                    2000<br />                       12<br />                     x<br />3000<b...
Pointer: Dereference Operator (*) <br />An operator that, when applied to a pointer variable, denotes the variable to whic...
77<br />Pointer: Dereference Operator (*)<br />                    2000<br />                    12    5<br />            ...
Pointer Types<br />78<br />char  ch;<br /> ch =  ‘A’;<br /> char*  q;<br /> q  = &ch;<br /> *q = ‘Z’;<br /> char*  p;<br /...
79<br />intPtr<br />money<br />Pointer Types<br />All pointer variables should be initialized to be NULL<br />A pointer th...
Review: lifetime of variables or objects<br />Global variables/objects: start from before the program starts until main() ...
Dynamic allocation (new operator)<br />Allocation of memory space for a variable at run time (as opposed to static allocat...
Deallocate allocated memory<br />Dynamically allocated memory needs to be deallocated when it’s no more used<br />Otherwis...
Pointers: examples<br />Figure 4-3(a) Declaring pointer variables; (b) pointing to statically allocated memory; (c) assign...
Pointers: example (cont’d)<br />84<br />This memory space cannot be deallocated, as we don’t have a pointer …<br />
Dynamically Allocated Arrays<br />Use new operator to allocate an array dynamically<br />int arraySize;<br />		//ask user ...
7. Data Design<br />
Let’s focus on: Data<br />Data:  the representation of information in a manner suitable for communication or analysis by h...
88<br /> Address<br />pointer    reference<br />C++  Built-In Data Types<br />Simple<br />Composite<br /> Integral<br />Fl...
Using C/C++ Data Type<br />As a C/C++ programmer, we know <br />Based on the application,  we model them as different “var...
C++ programmer are user of int<br />90<br />TYPE<br /> int<br />Representation of<br />	int<br />   as 16 bits two’s <br /...
Different Views of Data<br />Application (or user) levelmodeling real-life data in a specific context<br />When to use a c...
Different Views of Data: Library Example<br />Application (or user) levelLibrary of Congress, or Baltimore County Public L...
A two-dimensional array<br />A structured composite data type made up of a finite, fixed size collection of homogeneous el...
Many recurrent data types<br />List<br />Queue:  First In First Out<br />Operating System: process queues, printing job qu...
Data Abstraction: the idea<br />Data Abstraction: the separation of a data type’s logical properties from its implementati...
Abstract Data Type: A logic view<br />Abstract Data Type is a specification of<br />a set of data <br />the set of operati...
OOP & ADT<br />Object-oriented language provide mechanism for specifying ADT and implementing ADT<br />Class<br />An unstr...
Object-Oriented Programming: Basics<br />Class<br /> an unstructured type that encapsulates a fixed number of data compone...
Higher-Level Abstraction<br />Class specification<br />A specification of the class members (data and functions) with thei...
Classes vs. Structs<br />Without using public and private, member functions and data are<br />private by default in classe...
classDateType Specification<br />//  SPECIFICATION FILE	( datetype.h )<br />class  DateType// declares a  class data type<...
Use of C++ data type class<br />Variables of a class type are called objects (or instances) of that particular class.<br /...
Client Code Using DateType<br />#include   “datetype.h”  //includes specification of the class<br />#include   <iostream><...
2 separate files for class type<br />  //   SPECIFICATION FILE       ( datetype .h )<br />  //   Specifies the data and fu...
Implementation of member functions<br />// IMPLEMENTATION FILE                    (datetype.cpp)<br />#include “datetype.h...
C++ Classes: Constructors<br />Invoked/called (automatically) when an object of the class is declared/created<br />A class...
int DateType :: getMonth (  )  const<br />//  Accessor function for data member month<br />{<br />    return  month ;<br /...
C++ Classes: Destructors*<br />Called (automatically) when an object’s lifetime ends<br />To free up resources taken by th...
C++ Namespaces*<br />A mechanism for logically grouping declarations and definitions into a common declarative region<br /...
C++ Namespace: simple example*<br />Creating a namespace<br />namespace smallNamespace<br />{<br />int count = 0;<br />voi...
C++ std namespace*<br />Items declared in the C++ Standard Library are declared in the std namespace<br />You include file...
Encapsulation<br />Just as a capsule protects its contents, the class construct  protects its data members<br />112<br />/...
Object-Oriented Programming<br />Three ingredients in any object-oriented language<br />encapsulation<br />inheritance<br ...
Upcoming SlideShare
Loading in...5
×

C review

744

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
744
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

C review

  1. 1. C/C++ Review<br />1<br />
  2. 2. 1. 기본적자료형<br />
  3. 3. 기본적인 자료형 (Data Type)<br />변수(variable): 자료를 저장하는 기억장소<br />- 모든 변수는 자료형이 지정되어 있어야 하고, 한번 지정된 자료형은 변할 수 없다.<br />- 변수를 사용하기 전에 변수를 미리 정의해야 한다.<br />자료형_이름 변수리스트;<br />자료형_이름: <br />정수형: int, short int, long, <br /> unsigned int, …<br />실수형: float, double, …<br />문자형: char<br />부울형: bool, …<br />연산자 sizeof - 자료형의 크기<br />예 sizeof(int)<br />
  4. 4. 변수의 이름에대한규칙<br />중복된 이름의 변수를 사용할 수 없다.<br />변수 이름에는 알파벳, 숫자, 언더스코어(_)만 포함할 수 있다.<br />단, 숫자는 변수 이름의 첫 번째 글자로 사용할 수 없다.<br />변수 이름의 길이에는 제한이 없다.<br />변수 이름에 포함하는 알파벳은 대소문자를 구분한다.<br />키워드는 변수의 이름으로 사용할 수 없다.<br />
  5. 5. 변수의 이름을 붙일 경우<br />변수의 용도에 맞는 이름<br />예: StudentsNumber<br />변수내의 단어와 단어는 구분<br />예: StudentsNumber, student_number<br />필요 없이 긴 이름은 피함<br />
  6. 6. 자료형의 종류<br />C++에서 제공하는 기본 타입들<br />
  7. 7. 정수 타입 (Integers)<br />정수 타입별로 보관할 수 있는 값의 범위<br />10 진수, 8 진수, 16 진수의 표현<br />* 32비트 윈도우즈 시스템을 기준으로 한 값<br />int decimal = 41; // 10 진수<br />int octal = 041; // 8 진수<br />int hexadecimal = 0x41; // 16 진수<br />
  8. 8. 실수 타입(Floating points)<br />실수 타입별로 보관할 수 있는 값의 범위<br />* 32비트 윈도우즈 시스템을 기준으로 한 값<br />
  9. 9. 문자 타입 (Characters)<br />문자 타입별로 보관할 수 있는 값의 범위<br />문자 타입도 결국은 숫자를 보관한다.<br />* 32비트 윈도우즈 시스템을 기준으로 한 값<br />
  10. 10. 부울 타입 (Boolean)<br />부울 타입은 true 혹은 false의 값을 갖는다.<br />bool b1;<br />bool b2;<br />b1 = true;<br />b2 = false;<br />cout << “b1 = “ << b1 << “n”;<br />cout << “b2 = “ << b2 << “n”;<br />
  11. 11. 형 변환<br />내부적 형 변환<br />암시적 형변환은 변수에 대한 처리 과정에서 자동적으로 발생하는 형변환이다. <br />이 때 값이 변할 수 있다. 예: 실수 타입에서 정수 타입으로 형변환 발생 시 소수점 이하 부분이 잘린다. (반올림 아님)<br />강제 형 변환 <br />1) (type) expression<br /> 예 float f = 66.89;<br /> int i = (int)f; // i는 66 이 된다.<br /> 2) static_cast <자료형 이름>(수식)<br />예: int n = static_cast<int>(y+0.5);<br />
  12. 12. 상수<br />Define - 매크로<br />예) #define pi 3.14<br />const 자료형이름 상수이름 = 초기값; <br />예) const double pi = 3.14; <br />
  13. 13. 연산자<br />산술연산자 => 산술식<br />+. -, *, /, %, ++, --<br />관계연산자 => 관계식<br />>, >=, <, <=, ==, !=<br />논리연산자 => 논리식<br />&&, ||, !<br />비트연산자<br />& (비트 논리곱), | (비트 논리합), ^ (배타적 논리합), >> (우측 쉬프트), << (좌측 쉬프트)<br />대입연산자 = <br /> 지정문(대입문: assignment statement)에서 대입연산자를 사용<br />변수 = 식;<br />예) x = x + 5;<br />
  14. 14. 논리 연산자 (Logical Operators)<br />논리 연산을 수행한다.<br />bool b1 = true;<br />bool b2 = false;<br />bool and = b1 && b2;<br />bool or = b1 || b2;<br />bool not = ! b1;<br />* NOT 연산자는 피연산자를 하나만 받는다.<br />
  15. 15. 관계연산자와 논리연산자<br />일반적으로 논리연산자는 관계연산자와 함께 사용한다.<br />관계연산자의 우선순위가 높으므로 먼저 수행된다.<br />int age = 20; // 나이<br />bool male = true; // 성별<br />// 20세 이상이면서 남성인지 여부를 알아봄<br />bool ok = age >= 20 && male == true<br />
  16. 16. 연산자의 축약형<br />연산자의 축약형을 사용해서 번거로운 코딩을 줄일 수 있다.<br />
  17. 17. 연산중에 발생하는 형변환<br />두 피연산자의 타입이 다르다면, 두 피연산자 중에서 보다 큰 타입 쪽으로 형변환이 발생한다.<br />int 보다 작은 타입들은 int 혹은 unsigned int 타입으로 변환된다.<br />
  18. 18. 입출력 문 (input/output statement)<br />입력문<br /> cin >> 변수1 >> 변수2 >> … >>변수n<br />화면으로부터 자료를 입력<br />출력문<br /> cout<< 변수(식 혹은 문자열)<< 변수(식 혹은 문자열)… << 변수(식 혹은 문자열)<br />화면에 출력<br />
  19. 19. 2. 제어구조(control structure)<br />
  20. 20. 제어구조<br />판단 구조<br />if<br />if /else<br />반복 구조<br />for<br />While<br />do while<br />
  21. 21. if 문<br />문법 <br />if (조건)<br />문장<br />조건:<br />1. 관계식<br />식1 관계연산자 식2<br />관계 연산자:>, >= , <, <=, ==, !=<br />2. 논리식<br />식1 && 식2, 식1 and 식2<br />식1 || 식2, 식1 or 식2<br /> ! 식, not 식<br />블록<br />여러 개의 문장들을 하나의 단위로 간주<br />{ } 안에 둔다.<br />조건<br />문장<br />
  22. 22. if 문의 조건<br />조건의 예<br />(1) 관계식<br />a != 0<br /> a > b<br /> b*b > 4*a*c <br />(2) 논리식<br />a > b and b > c<br />a != 0 && b*b > 4*a*c<br />!more // bool more;<br />
  23. 23. 시작<br />x, y,z<br />x<y<br />xy<br />y<z<br />yz<br />x<y<br />xy<br />x,y,z 출력<br />끝<br />if 문<br />예:<br />세 수를 입력하여 크기 순서대로 출력<br />#include <iostream><br />using namespace std;<br />int main()<br />{ int x, y, z;<br /> cin >> x >> y >> z;<br /> int temp;<br /> if (x < y)<br /> {<br /> temp = x; <br /> x = y;<br /> y = temp;<br /> }<br /> if (y < z)<br /> { temp = y; y = z; z = temp;}<br /> if (x < y)<br /> { temp = x; x = y; y = temp;}<br /> cout << “정렬 결과: “ << x << ““ << y << ““ << z << endl; <br /> return 0;<br />}<br />
  24. 24. if/else 문<br />문법<br />if (조건)<br />문장1<br /> else <br />문장2<br />문제: 세수를 입력하여 최대값을 출력하는 프로그램을 작성하시오<br />조건<br />참<br />거짓<br />문장1<br />문장2<br />
  25. 25. if/else if …문<br />문법<br />if (조건1)<br />문장1<br /> else if (조건2)<br />문장2<br /> else if (조건3)<br />….<br /> else if (조건n)<br />문장n<br /> else<br />문장0<br />참<br />조건1<br />문장1<br />거짓<br />참<br />조건2<br />문장2<br />거짓<br />참<br />조건3<br />문장3<br />거짓<br /><br />참<br />조건n<br />문장n<br />거짓<br />문장0<br />
  26. 26. switch/case를 사용한 조건 비교<br />…<br />int grade;<br />level = score / 10;<br />switch( level )<br />{<br />case 10:<br />case 9:<br /> cout << " 학점: An";<br /> break;<br />case 8:<br /> cout << " 학점: Bn";<br /> break;<br />case 7:<br /> cout << " 학점: Cn";<br /> break;<br />case 6:<br /> cout << " 학점: Dn";<br /> break;<br />default:<br /> cout << " 학점: Dn";<br /> break;<br />}<br />
  27. 27. exp1 ? exp2 : exp3<br />int a = 3;<br />int b = 5;<br />int c = a > b ? a : b;<br />Dangling(매달린) else<br /> if 문 안에 if 문이 중첩(nested)되어있을 경우, else 문이 if 문의개수와 같지 않을 때 이 else를 어느 if 와 대응?<br /> => 가장 가까운 if와 대응시킴<br />예: if(a > b)<br /> if (a > c)<br /> x = 10;<br /> else<br /> x = 20;<br />
  28. 28. 참<br />조건<br />문장<br />거짓<br />sum =0;<br />i = 1;<br />참<br />i <= n<br />sum = sum + i<br />i = i + 1;<br />거짓<br />while 문<br />문법<br />while (조건)<br />문장<br /><ul><li>문제: 1부터 n까지의 합을 구하는 프로그램을 작성하시오.</li></ul>sum =0;<br />i = 1;<br />while (i <= n)<br />{<br /> sum = sum + i;<br /> i++;<br />}<br />
  29. 29. do/while 문<br />문법<br />do <br />문장<br /> while (조건)<br />문장<br />참<br />조건<br />거짓<br />
  30. 30. for 문<br />for(문장1; 조건; 문장2)<br />문장3;<br />문장1 –반복시작 전 초기화<br />조건 –반복 조건<br />문장3 - 반복 몸체<br />문장4 –조건과 관련된 문장으로, 몸체(문장3)를 수행한 후, 마지막에 수행 <br />횟수만큼 반복할 때 주로 사용<br />예<br />for(i=1; i <=N; i++)<br />문장<br />문장1<br />참<br />조건<br />문장3<br />거짓<br />문장2<br />
  31. 31. for 문<br />시작<br />N<br />예<br />N을 입력받아 N!을 출력하는 프로그램을 작성하라.<br />product =1;<br />i = 1;<br />#include <iostream><br />using namespace std;<br />int main()<br />{ int N;<br /> int i, product;<br /> cin >> N;<br /> product = 1;<br /> for(i = 1; i <= N; i++)<br /> product = product * i // product *= i;<br /> cout << N << “! = ” << product << endl; <br /> return 0;<br />}<br />참<br />i <= N<br />product= product * i<br />거짓<br />i++;<br />product를 출력<br />끝<br />
  32. 32. 루프 안에서의 break<br />루프(while, for)나 switch 블록 안에서 break 를 사용하면 블록 밖으로 실행의 흐름이 이동된다.<br />
  33. 33. 반복문 안에서의 continue<br />continue는 루프의 나머지 부분을 무시하고 조건을 반복문의 조건을 점검하는 곳으로 점프하여 루프의 다음을 실행하도록 하는 명령어<br />예:<br /> void main()<br /> {<br /> int i;<br /> for (i=1;i<=50;i++) {<br /> if (i % 9 == 0)<br /> continue;<br /> if (i % 3 == 0)<br /> printf("%dn",i);<br /> }<br />}<br />
  34. 34. 연속된 입력값의 처리 –표식을 이용<br />1) 입력의 마지막 값으로 입력으로 올 수 없는 값(표식: sentinel)을 사용<br />While loop 사용<br />성적들을 입력하여 평균을 구하는 프로그램을 작성하라.<br />성적들을 입력하여 최고성적과 최저성적을 구하는 프로그램을 작성하라.<br />#include <iostream><br />using namespace std;<br />int main()<br />{ int score;<br /> int n = 0;<br /> float sum = 0, avr;<br /> cin >> score;<br /> wihle (score != -1) // 표식값: -1<br /> {<br /> sum = sum + score; n++;<br /> cin >> score;<br /> }<br /> avr = sum/n;<br /> cout << “average = “ << avr << endl; <br /> return 0;<br />}<br />
  35. 35. 연속된 입력값의 처리–자료개수를 이용<br />1) 입력자료의 개수를 처음에 입력<br />for loop 사용<br />성적들을 입력하여 평균을 구하는 프로그램을 작성하라.<br />성적들을 입력하여 최고성적과 최저성적을 구하는 프로그램을 작성하라.<br />#include <iostream><br />using namespace std;<br />int main()<br />{ int score;<br /> int n, i;<br /> float sum = 0, avr;<br /> cin >> n;<br /> for (i = 0; i <n; i++)<br /> {<br /> cin >> score;<br /> sum = sum + score;<br /> }<br /> avr = sum/n;<br /> cout << “average = “ << avr << endl; <br /> return 0;<br />}<br />
  36. 36. 3. 배열 (Array)<br />
  37. 37. 배열<br />의미<br />배열은 연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조로 그 사용이 간편<br />배열은 동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조<br />크기<br />배열의 선언은 다음과 같은 구문을 이용<br />주요 요소는 배열 변수명(이름), 자료형, 그리고 배열의 크기<br />배열이름 score 로 정수 int 형의 저장 공간이 메모리에 연속적으로 할당된다.<br />
  38. 38. 배열 선언<br />Declaration of an array:<br />type arrayName[ arraySize ];<br />Example<br />int c[12];<br />arraySize must be an integer constant greater than zero.<br />type specify the types of data values to be stored in the array: can be int, float, double, char, etc.<br />38<br />
  39. 39. 배열의원소(Elements of An Array)<br />배열의특정한 원소(혹은 위치)를 참조하려면 다음을 명시하여야 함<br />Name of the array (배열 이름)<br />Index of the element (원소 인덱스) : <br /> 0 이상 값의 정수 혹은 정수 수식<br />첫 번째 원소의 인덱스는 0<br />Example<br />C[0] += 2;<br />C[a + b] = 3;<br />39<br />
  40. 40. Example<br />40<br />An array c has 12 elements ( c[0], c[1], … c[11] ); the value of c[0] is –45.<br />
  41. 41. 배열 초기화 – 초기화 리스트 이용<br />Initializer list: items enclosed in braces ({}) and separated by commas.<br />Examples<br />int n[ 5 ] = { 10, 20, 30, 40, 50};<br />int m[ 5 ] = { 10, 20, 30};<br />The remaining elements are initialized to zero.<br />int p[ ] = { 10, 20, 30, 40, 50};<br />Because array size is omitted in the declaration, the compiler determines the size of the array based on the size of the initializer list.<br />41<br />
  42. 42. 배열 초기화 – 루프 이용<br />Using a loop to initialize the array’s elements<br />Declare array, specify number of elements<br />Use repetition statement to loop for each element<br />Example:<br />int n[10];<br /> for ( int i = 0; i < 10; i++)<br /> {<br /> n[ i ] = 0;<br /> }<br />42<br />
  43. 43. 배열 이용<br />Usually use for loop to access each element of an array. <br />C++ has no array boundary checking<br />Referring to an element outside the array bounds is an execution-time logic error. It is not a syntax error.<br />You need to provide correct index.<br />43<br />
  44. 44. 배열 이용 – Example 1<br />Example: 배열 원소들의 합<br /> const int arraySize = 6;<br /> int a [ arraySize ] = { 87, 69, 45, 45, 43, 21 };<br /> int total = 0; // need to initialize it!!!<br /> for ( int i = 0; i < arraySize; i++)<br /> {<br /> total += a[i];<br /> }<br /> cout <<“Total of array elements is ” <<total<<endl;<br />44<br />
  45. 45. 45<br />4. 구조체<br />
  46. 46. 46<br />구조체<br />구조체(structure)<br />여러 개의 자료형의 값들의 모임을 나타내는 자료형<br />예: 여러 사람의 학번, 이름, 학과를 저장하는 변수 선언<br />구조체를 사용하지 않은 경우<br />int id1, id2, id3; … 학번<br /> char name1[10], name2[10], name3[10]; … 이름<br /> int dept1, dept2, dept3; … 학과코드<br />구조체를 사용한 경우<br />struct student { … 구조체 정의<br /> int id; … 학번<br /> char name[10]; … 이름<br /> int dept; … 학과코드<br />};<br />struct student p1, p2, p3; … 구조체 변수 선언<br />
  47. 47. 47<br />구조체 정의<br />구조체의 사용<br />구조체를 사용하기 위해서는 먼저 구조체의 자료 구조를 정의한다.<br />그 다음에 정의된 구조체의 자료형을 갖는 변수를 선언한다.<br />구조체 정의<br />struct student { <br />int id; … 학번<br /> char name[10]; … 이름<br />int dept; … 학과코드<br />} ;<br />student  구조체이름, 태그 이름<br />id, name, dept  구조체 원소, 필드(field), 멤버(member)<br />빠뜨리지 않도록 주의<br />
  48. 48. 48<br />구조체 변수 선언<br />구조체 정의 후 변수 선언<br />struct student person;<br /> struct student p1, p2;<br />구조체 정의와 함께 변수 선언<br />struct student { <br /> int id; <br /> char name[10]; <br /> int dept;<br /> } p1, p2;<br />
  49. 49. 49<br />구조체 정의와 변수 선언과의 관계<br />구조체 정의 구조체 변수 선언<br />id<br />p1<br />struct student<br />name<br />id<br />dept<br />name<br />p2<br />dept<br />id<br />name<br />자료구조 정의<br />dept<br />기억장소 할당<br />
  50. 50. 50<br />구조체 멤버 접근<br />구조체 멤버 접근: 구조체변수.멤버이름 (멤버연산자 .)<br /> person.id person.name person.dept<br /> p1.id p1.name p1.dept <br />예<br />person.id = 20030134; … 학번 초기화<br /> cin >> person.dept ; … 학과코드 입력<br />예: 두 점 사이의 거리 계산<br />2차원 좌표를 구조체를 사용하여 나타냄<br />#include <iostream><br />#include <cmath><br />using namespace std;<br />struct point { /* 2차원 좌표 */<br />float x;<br /> float y;<br />};<br />
  51. 51. 51<br />예제 (계속) <br />main()<br />{<br />struct point a, b; /* 두 점을 위한 변수 */<br /> float dx, dy, distance;<br />a.x = 10.0; a.y = 5.0; /* 첫 번째 점의 좌표 초기화 */<br />cin>> b.x >> b.y; /* 두 번째 점의 좌표 입력 */<br />dx = a.x - b.x; /* 두 점의 x좌표의 차이 */<br />dy = a.y - b.y; /* 두 점의 y좌표의 차이 */<br /> distance = sqrt(dx*dx + dy*dy); /* 두 점 사이의 거리 */<br />cout <<"distance = “ << distance;<br />}<br />
  52. 52. 52<br />중첩된 구조체<br />중첩된 구조체<br />구조체의 멤버로서 다른 구조체를 사용할 수 있음<br />struct triangle { struct triangle {<br /> struct point a; 또는 struct point a, b, c;<br /> struct point b; };<br /> struct point c;<br /> };<br />멤버의 접근<br />struct triangle p;<br />p.a.x = 0; p.a.y = 10; … 구조체 멤버 접근 방법을<br />… 반복하여 적용<br />
  53. 53. 53<br />예제: 복소수 곱셈<br />복소수의 곱셈<br />(a+bi) (c+di) = (ac-bd) + (ad+bc)i<br />#include <iostream><br />struct complex { /* 복소수 */<br />double real;<br /> double imag;<br />};<br />main()<br />{<br />struct complex x = { 1.0, 2.0 }; /* 곱셈할 복소수 초기화 */<br />struct complex y = { 2.0, -3.0 };<br />struct complex m; /* 곱셈 결과 */<br />m.real = x.real * y.real - x.imag * y.imag;<br />m.imag = x.real * y.imag + x.imag * y.real;<br />cout << "복소수 곱셈결과 = “ <<m.real < “ + ”<<m.imag << “i”;<br />}<br />
  54. 54. 54<br />구조체의 치환과 비교<br />구조체의 치환은 허용됨<br />구조체의 모든 멤버들이 복사됨<br />구조체의 비교는 허용되지 않음<br />개별적으로 멤버 비교해야 함<br /> struct point p1 = {4.0, 10.0};<br /> struct point p2;<br /> p2 = p1; /* 구조체 치환 */<br />cout << "p2: x = “ << p2.x << “p2:y = “ << p2.y);<br /> if (p1.x == p2.x && p1.y == p2.y) /* 구조체 비교: 멤버 별로 */<br />cout <<"두 점 p1과 p2는 같다.n";<br />
  55. 55. 55<br />구조체 배열<br />구조체의 배열<br />여러 개의 같은 구조체 자료형의 모임을 나타내는 자료형<br />예: 10명의 학생의 자료를 입력 받아서 역순으로 출력<br />struct student {<br />int id; string name; int dept;<br />};<br />main()<br />{<br />inti;<br />student s[10]; /* s는 구조체의 배열 */<br /> for (i=0; i<10; i++)<br />cin >> s[i].id >> s[i].name >> s[i].dept;<br /> for (i=0; i<10; i++)<br />cout << s[i].id << “ “ << s[i].name << “ “ << s[i].dept << endl;<br />}<br />
  56. 56. 5. 함수 (function)<br />
  57. 57. 프로그래밍에서의 함수<br />왜 함수를 사용하는가?<br />프로그래밍 설계 전략<br />Divide-and-Conquer<br />어떤 문제를 해결하기 위해 여러 개의 작은 문제로 쪼개는 것.<br />사람이 일을 처리하는 방법도 비슷<br />프로그램의 작성이 용이<br />반복적인 일을 수행하는 경우 원시파일의 크기를 줄일 수 있음.<br />
  58. 58. 함수 유형<br />라이브러리 함수<br />라이브러리 함수는 이미 정의되어 있고 컴파일되어 있음<br />표준 라이브러리 헤더 파일에서 원형을 제공<br />함수의 원형(prototype)에 맞게 호출<br />사용자 정의 함수<br />사용자가 직접 함수 작성<br />main도 사용자 정의 함수<br />
  59. 59. 함수 정의<br /><ul><li>프로그램은 하나 이상의 함수로 구성됨
  60. 60. 함수정의−함수가 수행할 일을 기술한 C 코드
  61. 61. 함수정의의 일반적인 형식</li></ul>{ <br /> declarations<br /> statements<br /> }<br />인자(parameter) 리스트<br /><ul><li> 이 함수가 가지는 인자의 목록
  62. 62. 이 함수를 호출할 때에는 이 리스트에 맞게 </li></ul> 호출해야함<br /><ul><li> 이것이 void이면 인자를 갖지 않음을 나타냄</li></ul>반환형(return type)<br /><ul><li>함수가 반환하는 값의 자료형
  63. 63. 이것이 void이면 반환하는 값이 없다는 </li></ul> 것을 나타냄<br />
  64. 64. 함수 정의 - 예<br />예:<br />int max (int x, int y)<br />{<br /> if (x >y)<br /> return x;<br /> else<br /> return y;<br />}<br />예:<br />double abs(double x)<br />{<br /> if (x >= 0)<br /> return x;<br /> else<br /> return –x;<br />}<br />
  65. 65. return 문장 <br /><ul><li>return 문</li></ul>(1) 형식 return 식;<br />의미 - 함수 결과로서 식의 값을 반환하고<br /> 함수를 빠져나간다.<br /> (2) 형식 return;<br />함수의 반환형이 void<br />의미 - 이 문장을 수행하면 함수를 빠져나간다.<br /><ul><li>함수의 수행 중 마지막을 만나면 함수를 빠져나간다. – return 문장의 수행과 동일한 효과 </li></li></ul><li>함수의 인자(parameter)<br /><ul><li>인자(parameter)
  66. 66. 함수에 자료를 전달하는 방법
  67. 67. 실제인자 (actual parameter) </li></ul> - 함수 사용에 있는 인자<br /><ul><li>형식인자 (formal parameter)</li></ul> - 함수 정의에 있는 인자<br />
  68. 68. 함수작성 예<br />Task: write ExchangeValue function that exchange the value of two parameters, both integers<br /> int x=10, y=20;<br /> Exchange(x,y); <br /> cout <<“x=“<<x<<endl;<br /> cout << “y=“<<y<<endl; <br />63<br />Should print out:<br /> x=20<br /> y=10<br />
  69. 69. C/C++ function<br />void ExchangeValue(int a, int b)<br />{<br />inttmp;<br />tmp=a;<br />a=b;<br />b=tmp;<br />}<br />void main( )<br />{<br />int myInteger1=4;<br />int myInteger2=5;<br />ExchangeValue(myInteger1,myInteger2);<br />cout<<“integer1= “<<myInteger1<<endl<<“integer2=“<<myInteger2<<endl;<br />}<br />64<br />a,b: formal parameters<br />올바르게 동작하느냐? <br />Call by value:<br /> A copy of the value of myInterger1 and <br />myInterger2 are passed to ExchangeValue.<br />actual parameters<br />
  70. 70. C++ Tips<br />65<br />CALLING<br />BLOCK<br />FUNCTION CALLED<br />Pass-by-value sends a copyof the value of the actual parameter<br />SO, <br />the actual parameter cannot be changed by the function<br />
  71. 71. C++ Tips<br />66<br />CALLING<br />BLOCK<br />FUNCTION CALLED<br />Pass-by-reference sends the location<br />(memory address) of the actual parameter<br />the actual parameter can be changed by the function<br />
  72. 72. Call-by-reference<br />Good for performance reason: eliminate copying overhead<br />Called the same way as call-by-value<br />int squareByValue (int x);<br />int squareByReference (int & x);<br />int x,z;<br />…<br />squareByValue(x);<br />squareByReference(z);<br />Bad for security: called function can corrupt caller’s data<br />Solution: use const quantifier<br />67<br />
  73. 73. C/C++ function: call by reference<br />void ExchangeValue(int & a, int & b)<br />{<br />inttmp;<br />tmp=a;<br />a=b;<br />b=tmp;<br />}<br />int main(intargc, char ** argv)<br />{<br />int value1=4;<br />int value2=5;<br />int result=ExchangeValue(value1,vaule2);<br />cout<<“value= “<<value1<<endl<<“value2=“<<value2<<endl;<br />}<br />68<br />a,b: formal parameters<br />제대로동작함!<br />actual parameters<br />
  74. 74. Passing Arrays as Parameters<br />In C/C++, arrays are always passed by reference<br />& is not used in the formal parameter type.<br />Whenever an array is passed as a parameter, its base address is sent to called function<br />Example:<br />// prototype<br /> float SumValues (float values [], int numOfValues );<br />69<br />
  75. 75. constarray parameter <br />If the function is not supposed to change the array:<br /> you can protect the array from unintentional changes, use const in formal parameter list and function prototype.<br />FOR EXAMPLE . . .<br />// prototype<br /> float SumValues( const float values[ ], <br /> int numOfValues );<br />70<br />If there is statement inside SumValues() that changes values of values array, <br />compiler will report error.<br />
  76. 76. // Pre: values[0] through values[numOfValues-1] // have been assigned// Returns the sum of values[0] through// values[numOfValues-1]<br />float SumValues(constfloat values[ ], int numOfValues )<br />{ <br />float sum = 0;<br /> for ( int index = 0; index < numOfValues; index++ )<br /> {<br /> sum += values [ index ] ;<br /> }<br /> return sum;<br />}<br />71<br />
  77. 77. 6. 포인터 (pointer)<br />
  78. 78. Pointer Variable<br />A variable whose value is the address of a location in memory<br />i.e., a variable that points to some address in memory…<br />type * pointer_variable_name;<br />73<br />int* intPointer<br />
  79. 79. Assign Value to Pointer<br />74<br />int alpha;<br />int* intPointer;<br />intPointer = &alpha;<br />If alpha is at address 33, <br />memory looks like this<br />alpha<br />
  80. 80. Pointer Types<br />75<br /> 2000<br /> 12<br /> x<br />3000<br /> 2000<br /> ptr<br />int x;<br /> x = 12;<br /> int* ptr;<br /> ptr = &x;<br />Because ptr holds the address of x, we say that ptr “points to” x<br />
  81. 81. Pointer: Dereference Operator (*) <br />An operator that, when applied to a pointer variable, denotes the variable to which the pointer points<br />76<br /> 2000<br /> 12<br /> x<br />3000<br /> 2000<br /> ptr<br />int x;<br /> x = 12;<br /> int* ptr;<br /> ptr = &x;<br /> std::cout << *ptr;<br />*ptr is the value in the place to which ptr points<br />
  82. 82. 77<br />Pointer: Dereference Operator (*)<br /> 2000<br /> 12 5<br /> x<br />3000<br /> 2000<br /> ptr<br />int x;<br /> x = 12;<br /> int* ptr;<br /> ptr = &x;<br /> *ptr = 5;<br />// changes the value <br />// at adddress ptr to 5<br />
  83. 83. Pointer Types<br />78<br />char ch;<br /> ch = ‘A’;<br /> char* q;<br /> q = &ch;<br /> *q = ‘Z’;<br /> char* p;<br /> p = q; <br />// the right side has value 4000<br />// now p and q both point to ch<br /> 4000<br /> A Z<br /> ch<br />5000 6000<br /> 4000 4000<br /> q p<br />
  84. 84. 79<br />intPtr<br />money<br />Pointer Types<br />All pointer variables should be initialized to be NULL<br />A pointer that points to nothing; available in <cstdlib><br />NULL is defined to be 0;<br />But NULL is not memory address 0<br />int * intPtr = NULL;<br />Float * money = NULL;<br />
  85. 85. Review: lifetime of variables or objects<br />Global variables/objects: start from before the program starts until main() ends<br />int num;<br /> main(){<br /> ….<br /> }<br />Local variables/objects: declared within the body of a function or a block <br />Created upon entering the function/block, destroyed upon exiting the function/block<br />Dynamical variables/objects: created using new(), malloc() calls<br />Remains alive until delete() is called to free the memory<br />Destroyed upon the program exits<br />80<br />
  86. 86. Dynamic allocation (new operator)<br />Allocation of memory space for a variable at run time (as opposed to static allocation at compile time)<br />81<br />int * intPointer;<br />intPointer = new int;<br />
  87. 87. Deallocate allocated memory<br />Dynamically allocated memory needs to be deallocated when it’s no more used<br />Otherwise, memory leak will degrade performance<br />delete operator returns memory to system<br /> delete p;<br />Value of p is unchanged, i.e. pointing to a deallocated memory<br />Accessing a deallocated memory (*p) can be dangerous <br />Always set to NULL after deallocation<br /> delete p; // free up memory pointed to by p<br /> p = NULL; // safeguard, extremely important<br />82<br />
  88. 88. Pointers: examples<br />Figure 4-3(a) Declaring pointer variables; (b) pointing to statically allocated memory; (c) assigning a value;<br />(d) allocating memory dynamically; (e) assigning a value<br />83<br />
  89. 89. Pointers: example (cont’d)<br />84<br />This memory space cannot be deallocated, as we don’t have a pointer …<br />
  90. 90. Dynamically Allocated Arrays<br />Use new operator to allocate an array dynamically<br />int arraySize;<br /> //ask user to enter arraySize…<br /> //<br />double *anArray = new double[arraySize];<br />arraySize has a value determined at run time<br />Dynamically allocated array can be increased<br />double *oldArray = anArray;<br /> anArray = newdouble[2*arraySize]; <br /> // copy from oldArray to anArray<br /> delete [] oldArray; // deallocate oldArray<br />85<br />
  91. 91. 7. Data Design<br />
  92. 92. Let’s focus on: Data<br />Data: the representation of information in a manner suitable for communication or analysis by humans or machines<br />Data are the nouns of the programming world: <br />The objects that are manipulated<br />The information that is processed<br />Different view about data<br />Application view: what real life object can be modeled using the data ?<br />Logic view: how to use the data ? Operations ?<br />Implementation view: how to implement the data ? <br />87<br />
  93. 93. 88<br /> Address<br />pointer reference<br />C++ Built-In Data Types<br />Simple<br />Composite<br /> Integral<br />Floating<br />array struct union class<br />char short int long enum<br />float double long double<br />
  94. 94. Using C/C++ Data Type<br />As a C/C++ programmer, we know <br />Based on the application, we model them as different “variables”<br />Age: integer<br />Gender: enumeration<br />Name: array of char, or string<br />Also we know what kind of operations each data type supports<br />We do not worry about how an integer is implemented<br />Unless in computer organization class …<br />89<br />
  95. 95. C++ programmer are user of int<br />90<br />TYPE<br /> int<br />Representation of<br /> int<br /> as 16 bits two’s <br /> complement<br /> +<br />Implementation of <br /> Operations<br />Value range: <br />INT_MIN . . INT_MAX<br /> Operations:<br /> + prefix<br /> - prefix<br /> + infix<br /> - infix<br />* infix<br /> / infix<br />% infix<br />Relational Operators <br /> infix<br />(inside)<br />
  96. 96. Different Views of Data<br />Application (or user) levelmodeling real-life data in a specific context<br />When to use a certain data type ?<br />Logical (or ADT) levelabstract view of the domain and operations<br />What<br />How to use the data type ?<br />Implementation levelspecific representation of the structure to hold the data items, and the coding for operations<br />How to implement the data type ? <br />91<br />
  97. 97. Different Views of Data: Library Example<br />Application (or user) levelLibrary of Congress, or Baltimore County Public Library<br />A library system can be implemented for Library of Congress…<br />Logical (or ADT) leveldomain is a collection of books; operations include: check book out, check book in, pay fine, reserve a book<br />A library’s necessary functions to outside world<br />Implementation levelrepresentation of the structure to hold the “books” and the coding for operations<br />How a specific library is implemented (how are books organized…)? <br />92<br />
  98. 98. A two-dimensional array<br />A structured composite data type made up of a finite, fixed size collection of homogeneous elementsordered in two dimensions and for which direct access is provided:<br />dataTable[row][col]<br />93<br />Logic view of 2D array:all a C++ program needs to know<br />logical level<br />int dataTable[10][6];<br />
  99. 99. Many recurrent data types<br />List<br />Queue: First In First Out<br />Operating System: process queues, printing job queue<br />Stack: Last in First out<br />Calling stack<br />Compiler: to parse expressions<br />Graph:<br />Model computer network<br />….<br />94<br />Provide a high-level data type with these logic property<br />
  100. 100. Data Abstraction: the idea<br />Data Abstraction: the separation of a data type’s logical properties from its implementation<br />User of the data type only needs to understand its logical property, no need to worry about its implementation<br />95<br />LOGICAL PROPERTIES IMPLEMENTATION<br />What are the possible values? How can this be done in C++?<br />What operations will be <br />needed? <br />
  101. 101. Abstract Data Type: A logic view<br />Abstract Data Type is a specification of<br />a set of data <br />the set of operations that can be performed on the data <br />Constructors: to creates new instances of an ADT; usually a language feature<br />Transformers (mutators): operations that change the state of one or more data values in an ADT<br />Observers: operations that allow us to observe the state of the ADT<br />Iterators: operations that allow us to access each member of a data structure sequentially<br />Abstract Data Type is implementation independent<br />96<br />
  102. 102. OOP & ADT<br />Object-oriented language provide mechanism for specifying ADT and implementing ADT<br />Class<br />An unstructured type that encapsulates a fixed number of data components (data members) with the functions (member functions) that manipulate them<br />predefined operations on an instance of a class are whole assignment and component access<br />Client<br />Software that uses (declares and manipulates) objects (instances) of a particular class to solve some problem<br />97<br />
  103. 103. Object-Oriented Programming: Basics<br />Class<br /> an unstructured type that encapsulates a fixed number of data components (data members) with the functions (called member functions) that manipulate them<br />Object<br />An instance of a class<br />Method<br />A public member function of a class<br />Instance variable (Data Member)<br />A private data member of a class<br />98<br />
  104. 104. Higher-Level Abstraction<br />Class specification<br />A specification of the class members (data and functions) with their types and/or parameters<br />Class implementation<br />The code that implements the class functions<br />99<br />Why would you want to<br />put them in separate files?<br />
  105. 105. Classes vs. Structs<br />Without using public and private, member functions and data are<br />private by default in classes <br />public by default in structs.<br />Usually, there is no member functions defined in structs<br />struct is passive data<br />class is active data<br />100<br />
  106. 106. classDateType Specification<br />// SPECIFICATION FILE ( datetype.h )<br />class DateType// declares a class data type<br />{<br />public : // 4 public member functions<br /> DateType (int newMonth,int newDay,int newYear);//constructor<br /> int getYear( ) const ; // returns year<br /> int getMonth( ) const ; // returns month<br /> int getDay( ) const ; // returns day<br />private : // 3 private data members<br /> int year ; <br /> int month ; <br /> int day ;<br />} ;<br />101<br />101<br />
  107. 107. Use of C++ data type class<br />Variables of a class type are called objects (or instances) of that particular class.<br />Software that declares and uses objects of the class is called a client.<br />Client code uses public member functions (called methods in OOP) to handle its class objects.<br />Sending a message means calling a public member function.<br />102<br />
  108. 108. Client Code Using DateType<br />#include “datetype.h” //includes specification of the class<br />#include <iostream><br />using namespace std;<br />int main ( )<br />{ <br /> // declares two objects of DateType<br /> DateType startDate ( 6, 30, 1998 ) ;<br /> DateType endDate ( 10, 31, 2002 ) ;<br /> bool retired = false ;<br /> cout << startDate.getMonth( )<< “/” << startDate.getDay( ) <br /> << “/” << startDate.getYear( ) << endl;<br /> while ( ! retired ) <br /> { finishSomeTask( ) ;<br /> . . . <br /> }<br /> return 0; <br />}<br />103<br />How to dynamically create a DateType object ?<br />103<br />
  109. 109. 2 separate files for class type<br /> // SPECIFICATION FILE ( datetype .h )<br /> // Specifies the data and function members.<br /> class DateType<br /> {<br /> public:<br /> . . .<br /> private:<br /> . . .<br /> } ;<br /> // IMPLEMENTATION FILE ( datetype.cpp )<br /> // Implements the DateType member functions. <br /> . . .<br />104<br />
  110. 110. Implementation of member functions<br />// IMPLEMENTATION FILE (datetype.cpp)<br />#include “datetype.h” // also must appear in client code<br />DateType :: DateType ( int newMonth, int newDay,<br /> int newYear )<br />// Post: year is set to newYear.<br />// month is set to newMonth.<br />// day is set to newDay.<br />{<br /> year = newYear ;<br /> month = newMonth ;<br /> day = newDay ;<br />}<br />105<br />:: Scope resolution operator<br />105<br />
  111. 111. C++ Classes: Constructors<br />Invoked/called (automatically) when an object of the class is declared/created<br />A class can have several constructors<br />A default constructor has no arguments<br />different constructors with different parameter list (signature)<br />Eg. DateType can be extended to have the following constructor :<br />DateType (int secondsSinceEpoch);<br />The compiler will generate a default constructor if you do not define any constructors<br />106<br />
  112. 112. int DateType :: getMonth ( ) const<br />// Accessor function for data member month<br />{<br /> return month ;<br />}<br />int DateType :: getYear ( ) const<br />// Accessor function for data member year<br />{<br /> return year ;<br />}<br />int DateType :: getDay ( ) const<br />// Accessor function for data member day<br />{<br /> return day ;<br />}<br />107<br />107<br />
  113. 113. C++ Classes: Destructors*<br />Called (automatically) when an object’s lifetime ends<br />To free up resources taken by the object, esp. memory<br />Each class has one destructor<br />If you don’t need to free up resources, you can omit define destructor and the compiler will generate a default destructor<br />108<br />
  114. 114. C++ Namespaces*<br />A mechanism for logically grouping declarations and definitions into a common declarative region<br />namespace myNamespace<br /> {<br /> // Definitions <br /> // Declarations . . .<br />} //end myNamespace<br />The contents of the namespace can be accessed by code inside or outside the namespace<br />Use the scope resolution operator (::) to access elements from outside the namespace<br />Alternatively, the using declaration allows the names of the elements to be used directly<br />109<br />
  115. 115. C++ Namespace: simple example*<br />Creating a namespace<br />namespace smallNamespace<br />{<br />int count = 0;<br />void abc();<br />} // end smallNamespace<br />Using a namespace<br />smallNamesapce::count=0;<br />usingnamespace smallNamespace;<br />count +=1;<br />abc(); <br />110<br />
  116. 116. C++ std namespace*<br />Items declared in the C++ Standard Library are declared in the std namespace<br />You include files for several functions declared in the std namespace <br />To include input and output functions from the C++ library, write <br />#include <iostream><br />usingnamespace std;<br />111<br />
  117. 117. Encapsulation<br />Just as a capsule protects its contents, the class construct protects its data members<br />112<br />// SPECIFICATION FILE ( datetype.h )<br />class DateType<br />{<br />Public : <br /> DateType (int newMonth,int newDay,int newYear);//constructor<br /> int getYear( ) const ; <br /> int getMonth( ) const ; <br /> int getDay( ) const ; <br />private : <br /> int year ; <br /> int month ; <br /> int day ;<br />} ;<br />
  118. 118. Object-Oriented Programming<br />Three ingredients in any object-oriented language<br />encapsulation<br />inheritance<br />polymorphism<br />113<br />
  119. 119. Inheritance<br /> Inheritance: A mechanism used with a hierarchy of classes in which each descendant class inherits the properties (data and operations) of its ancestor class <br />Base class<br />The class being inherited from<br />Derived class<br />the class that inherits<br />114<br />Inheritance is an "is-a" …<br />
  120. 120. Overriding & Polymorphism<br />Polymorphism: the ability to determine which of several operations with the same name (within the class hierarchy) is appropriate, either at compiling time (static binding) or run time (dynamic binding)<br />Overriding<br /><ul><li>Function with virtual keyword in base class.
  121. 121. Derived classes override function as appropriate.
  122. 122. An overridden function in a derived class has the same signature and return type (i.e. prototype) as the function it overrides in its base class.</li></ul>115<br />
  123. 123. Example: Overriding<br />116<br />Each class has a method Print<br />Person.Print just prints the name<br />Employee.Print prints the name and job title<br />Manager.Print prints name, job title, and department<br />Person<br />Employee<br />Manager<br />Printis overriden.<br />* Static binding is when the compiler can tell which Print to use<br />* dynamic binding is when the determination cannot be made until run time => use the virtual keyword<br />
  124. 124. Object-Oriented Programming<br />Inheritance and polymorphism work together to allow programmer to build useful hierarchies of classes that can be put into a library to be reused in different applications<br />Examples:<br /> Employee class can reuse features implemented at Person class<br /> Only override functions when needed, like print()<br /> A program working for Person class still work for Employee object (through polymorphism) <br />Print out all persons,…<br />117<br />
  125. 125. Miscellaneous: I/O in C++<br />Header files iostream and fstreamdeclare the istream, ostream,and ifstream, ofstream I/O classes.<br />Both cin and cout are class objects<br />These statements declare myInfile as an instance of class ifstream and invoke member function open.<br /> ifstream myInfile ;<br /> myInfile.open ( “A:mydata.dat” ) ;<br />118<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×