Ch 6. Structures and Classes

Similar documents
Ch 6-1. Structures. March 30, Prof. Young-Tak Kim

Chapter 6 Structures and Classes. GEDB030 Computer Programming for Engineers Fall 2017 Euiseong Seo

Dot and Scope Resolution Operator

Structures and Classes CS 16: Solving Problems with Computers I Lecture #15

Ch 8. Operator Overloading, Friends, and References

Chapter 10 Defining Classes

Programming & Abstraction

Starting Savitch Chapter 10. A class is a data type whose variables are objects. Some pre-defined classes in C++ include int,

Classes and Data Abstraction. Topic 5

CIS 190: C/C++ Programming. Classes in C++

Abstract Data Types. Different Views of Data:

PIC 10A. Lecture 15: User Defined Classes

Ch 7. Constructors and Other Tools

Lecture 7. Log into Linux New documents posted to course webpage

Ch 5-2. Arrays Part 2

Software Design and Analysis for Engineers

CS 115 Exam 3, Spring 2011

Function Call Example

Ch 6-8. C-Strings. April 30, Prof. Young-Tak Kim

Computer Programming

Ch 6-2. File Input / Output

Simplest version of DayOfYear

Friends and Overloaded Operators

Ch 4. Parameters and Function Overloading

Classes and Data Abstraction. Topic 5

Friends and Overloaded Operators

Abstract Data Types (ADTs) 1. Legal Values. Client Code for Rational ADT. ADT Design. CS 247: Software Engineering Principles

1 Pointer Concepts. 1.1 Pointer Examples

CS 247: Software Engineering Principles. ADT Design

Lab Instructor : Jean Lai

Fast Introduction to Object Oriented Programming and C++

Object Oriented Programming COP3330 / CGS5409

Implementing an ADT with a Class

Fundamentals of Programming Session 24

Fundamentals of Programming. Lecture 19 Hamed Rasifard

(5-1) Object-Oriented Programming (OOP) and C++ Instructor - Andrew S. O Fallon CptS 122 (February 4, 2019) Washington State University

File Input / Output Streams in C++ CS 16: Solving Problems with Computers I Lecture #9

ADTs & Classes. An introduction

Ch 1. Algorithms and Basic C++ Programming

Short Notes of CS201

III. Classes (Chap. 3)

Lab 2: Pointers. //declare a pointer variable ptr1 pointing to x. //change the value of x to 10 through ptr1

Sample Code: OUTPUT Daily Highs & Lows

CS201 - Introduction to Programming Glossary By


Chapter 15 - C++ As A "Better C"

Chapter 13. Recursion. Copyright 2016 Pearson, Inc. All rights reserved.

Chapter 2 Data Design and Implementation

Exceptions, Case Study-Exception handling in C++.

Agenda. The main body and cout. Fundamental data types. Declarations and definitions. Control structures

Introduction to Computers and C++ Programming p. 1 Computer Systems p. 2 Hardware p. 2 Software p. 7 High-Level Languages p. 8 Compilers p.

PIC 10A. Final Review: Part I

Cpt S 122 Data Structures. Introduction to C++ Part II

Discussion 1H Notes (Week 3, April 14) TA: Brian Choi Section Webpage:

Classes. C++ Object Oriented Programming Pei-yih Ting NTOU CS

Chapter 6: User-Defined Functions. Objectives (cont d.) Objectives. Introduction. Predefined Functions 12/2/2016

Multiple Choice (Questions 1 14) 28 Points Select all correct answers (multiple correct answers are possible)

CMPT 117: Tutorial 1. Craig Thompson. 12 January 2009

Chapter 4 Defining Classes I

CS24 Week 3 Lecture 1

Lab 12 Object Oriented Programming Dr. John Abraham

Review. Outline. Array Pointer Object-Oriented Programming. Fall 2013 CISC2200 Yanjun Li 1. Fall 2013 CISC2200 Yanjun Li 2

Review. Outline. Array Pointer Object-Oriented Programming. Fall 2017 CISC2200 Yanjun Li 1. Fall 2017 CISC2200 Yanjun Li 2

COMP322 - Introduction to C++ Lecture 02 - Basics of C++

Introduction to C++ Professor Hugh C. Lauer CS-2303, System Programming Concepts

typedef int Array[10]; String name; Array ages;

Reference Parameters A reference parameter is an alias for its corresponding argument in the function call. Use the ampersand (&) to indicate that

Do not turn to the next page until the start of the exam.

Course "Data Processing" Name: Master-1: Nuclear Energy Session /2018 Examen - Part A Page 1

More Flow Control Functions in C++ CS 16: Solving Problems with Computers I Lecture #4

Functions. Lecture 6 COP 3014 Spring February 11, 2018

Lab 14 SERACHI G Dr. John P. Abraham

Introduction to C++ Introduction to C++ 1

C++ For Science and Engineering Lecture 12

Note 12/1/ Review of Inheritance Practice: Please write down 10 most important facts you know about inheritance...

CSC 172 Intermediate Progamming

Tutorial 8 (Array I)

OBJECT-ORIENTED PROGRAMMING CONCEPTS-CLASSES II

GE U111 Engineering Problem Solving & Computation Lecture 6 February 2, 2004

Review of Important Topics in CS1600. Functions Arrays C-strings

Sequential Search (Searching Supplement: 1-2)

CSE 333. Lecture 10 - references, const, classes. Hal Perkins Paul G. Allen School of Computer Science & Engineering University of Washington

Chapter 6. I/O Streams as an Introduction to Objects and Classes. Copyright 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley

Introduction to C++ Systems Programming

Classes. Logical method to organise data and functions in a same structure. Also known as abstract data type (ADT).

Chapter 3 Function Basics

Programming Assignment #2

Multiple Choice (Questions 1 14) 28 Points Select all correct answers (multiple correct answers are possible)

Character Functions & Manipulators Arrays in C++ CS 16: Solving Problems with Computers I Lecture #10

Unit 6. Thinking with Functions

Ch 2 ADTs and C++ Classes

Problem Solving with C++

A SHORT COURSE ON C++

Object Oriented Design

Defining Classes and Methods

Basic memory model Using functions Writing functions. Basics Prototypes Parameters Return types Functions and memory Names and namespaces

CS 31 Discussion 1A, Week 8. Zengwen Yuan (zyuan [at] cs.ucla.edu) Humanities A65, Friday 10:00 11:50 a.m.

C How to Program, 6/e by Pearson Education, Inc. All Rights Reserved. 1

Interview Questions of C++

What we will learn about this week: Declaring and referencing arrays. arrays as function arguments. Arrays

Transcription:

2013-2 Ch 6. Structures and Classes September 1, 2013 Advanced Networking Technology Lab. (YU-ANTL) Dept. of Information & Comm. Eng, Graduate School, Yeungnam University, KOREA (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr)

Struct ( 구조체 ) Outline Classes Defining, member functions Public and private members Accessor (i.e., get_xx()) and mutator (i.e., set_xx())functions Structures vs. classes ch 6-2

Structures ( 구조체 ) 2 nd aggregate data type: struct Recall: aggregate meaning "grouping" Recall array: collection of values of same type Structure: collection of values of different types Treated as a single item, like arrays Major difference: Must first "define" struct Prior to declaring any variables ch 6-3

Structure Types Define struct globally (typically) No memory is allocated Just a "placeholder" for what our struct will "look like" Definition: typedef struct MyCmplx { // Name of new struct "type" double real; // member names double imagin; } Cmplx; double mag; // magnitude ch 6-4

Declare Structure Variable With structure type defined, now declare variables of this new type: Cmplx c1, c2; Just like declaring simple types Variable c1 and c2 are now of type Cmplx They contain "member values real, imagin, and mag Each of the struct "parts" ch 6-5

Accessing Structure Members Dot Operator to access members Cmplx c1; c1.real = 2.0; c1.imagin = 3.0; c1.mag = sqrt(pow(c1.real, 2.0) + pow(c1.imagin, 2.0) ); Called "member variables" The "parts (attribute) of the structure variable Different structs can have same name member variables No conflicts struct Student { int st_id; char name[20]; Date birthdate; }; struct Employ { int emp_id; char name[20]; Date birthdate; }; ch 6-6

typedef struct MyCmplx { double real; double imagin; double mag; } Cmplx; void printcmplx(cmplx c) { char sign; Structure Example } sign = (c.imagin < 0)? '-' : '+'; cout << setw(8) << c.real <<" " << sign << " j" << fabs(c.imagin) ; cout << " (magnitude " << c.mag << ")" << endl; Cmplx cmplxadd(cmplx c1, Cmplx c2) { Cmplx res; res.real = c1.real + c2.real; res.imagin = c1.imagin + c2.imagin; res.mag = sqrt(res.real*res.real + res.imagin*res.imagin); return res; } ch 6-7

Cmplx cmplxsub(cmplx c1, Cmplx c2) { Cmplx res; res.real = c1.real - c2.real; res.imagin = c1.imagin - c2.imagin; res.mag = sqrt(res.real*res.real + res.imagin*res.imagin); return res; } Cmplx cmplxmultiply(cmplx c1, Cmplx c2) { Cmplx res; res.real = (c1.real * c2.real) - (c1.imagin * c2.imagin); res.imagin = (c1.real * c2.imagin) + (c1.imagin * c2.real); res.mag = sqrt(res.real*res.real + res.imagin*res.imagin); return res; } Cmplx cmplxdivide(cmplx c1, Cmplx c2) { Cmplx res; double denom; denom = c2.real*c2.real + c2.imagin*c2.imagin; res.real = ((c1.real * c2.real) + (c1.imagin * c2.imagin)) / denom; res.imagin = ((c2.real * c1.imagin) - (c1.real * c2.imagin)) / denom; res.mag = sqrt(res.real*res.real + res.imagin*res.imagin); return res; } ch 6-8

1. int main() 2. { 3. Cmplx cmplxs[7]; 4. cout << "Input two complex numbers : c1.real, c1.imagin, 5. cout << c2.real, c2.imagin"<<endl; 6. cout << "c1.real : "; 7. cin >> cmplxs[0].real; 8. cout << "c1.imagin : "; 9. cin >> cmplxs[0].imagin; 10. cmplxs[0].mag = sqrt((cmplxs[0].real*cmplxs[0].real) 11. + (cmplxs[0].imagin * cmplxs[0].imagin)); 12. cout << "c2.real : "; 13. cin >> cmplxs[1].real; 14. cout << "c2.imagin : "; 15. cin >> cmplxs[1].imagin; 16. cmplxs[1].mag = sqrt((cmplxs[1].real*cmplxs[1].real) 17. + (cmplxs[1].imagin * cmplxs[1].imagin)); ch 6-9

18. cmplxs[2] = cmplxadd(cmplxs[0], cmplxs[1]); 19. cmplxs[3] = cmplxsub(cmplxs[0], cmplxs[1]); 20. cmplxs[4] = cmplxmultiply(cmplxs[0], cmplxs[1]); 21. cmplxs[5] = cmplxdivide(cmplxs[0], cmplxs[1]); 22. cmplxs[6] = cmplxs[0]; 23. for (int i=0; i<7; i++) { 24. cout << "cmplxs[" << i << "]: "; 25. printcmplx(cmplxs[i]); 26. } 27. return 0; 28.} ch 6-10

Structure Assignments Given structure named Cmplx Declare two structure variables: Cmplx c1, c2; Both are variables of "struct type Cmplx" Simple assignments are legal: c2 = c1; Simply copies each member variable from c1 into member variables of c2 ch 6-11

Structures as Function Arguments Passed like any simple data type Pass-by-value Pass-by-reference Or combination Can also be returned by function Return-type is structure type Return statement in function definition sends structure variable back to caller ch 6-12

Initializing Structures Can initialize at declaration Example: struct Planet { }; char name[10]; double relativemass; double distance; struct Planet earth = { Earth, 1.0, 150}; Declaration provides initial data to all three member variables ch 6-13

Array of Structure Struct data elements can be organized in array Example) struct Planet solarsystem[solar_planets] = { {"Mercury", 0.0558, 57.9}, {"Venus", 0.815, 108}, {"Earth",1.0, 150}, {"Mars", 0.107, 228}, {"Jupiter", 318, 778}, {"Saturn", 95.1, 1430}, {"Uranus", 14.5, 2870}, {"Neptune", 17.2, 4500}, {"Pluto", 0.11, 5900} }; ch 6-14

Handling attributes of each element of struct array void printplanets(struct Planet solarplanets[], int num_planet) 1. { 2. cout.setf(ios::fixed); 3. cout.setf(ios::showpoint); 4. for (int i=0; i<num_planet; i++) { 5. cout << setw(2) << i; 6. cout << " Name: "; 7. cout << setiosflags(ios::left) <<setw(8) << solarplanets[i].name; 8. cout << resetiosflags(ios::left); 9. cout << " Rel Mass: "; 10. cout << setw(7) << setprecision(3) <<solarplanets[i].relativemass; 11. cout << " Dist from Sun: "; 12. cout << setw(6) << setprecision(1) << solarplanets[i].distance ; 13. cout << endl; 14. } // end for 15.} ch 6-15

Sorting Array of Structure Sorting elements in array of structure (1) void sortplanetsbyrelmass(struct Planet solarplanets[], int num_planet) 1. { 2. struct Planet temp; 3. int i, j, m; 4. double min_relmass; 5. for (i=0; i<num_planet-1; i++) { 6. m = i; 7. min_relmass = solarplanets[i].relativemass; 8. for (j=i+1; j<num_planet; j++) { 9. if (min_relmass > solarplanets[j].relativemass) { 10. m = j; 11. min_relmass = solarplanets[j].relativemass; 12. } 13. } // end inner for 14. if (m!= i) { // if new minimum found, swap 15. temp = solarplanets[i]; 16. solarplanets[i] = solarplanets[m]; 17. solarplanets[m] = temp; 18. } 19. } // end outer for 20. } ch 6-16

Sorting elements in array of structure (2) void sortplanetsbyname(struct Planet solarplanets[], int num_planet) { 1. struct Planet temp; 2. int i, j, m; 3. char min_name[10] = {0}; 4. for (i=0; i<num_planet-1; i++) { 5. m = i; 6. strcpy(min_name, solarplanets[i].name); 7. for (j=i+1; j<num_planet; j++) { 8. if (strcmp(min_name, solarplanets[j].name) > 0) { 9. m = j; 10. strcpy(min_name, solarplanets[j].name); 11. } 12. } // end inner for 13. if (m!= i) { // if new minimum found, swap 14. temp = solarplanets[i]; 15. solarplanets[i] = solarplanets[m]; 16. solarplanets[m] = temp; 17. } 18. } // end outer for 19.} ch 6-17

1. int main() { 2. struct Planet solarsystem[solar_planets] = 3. {{"Mercury", 0.0558, 57.9}, {"Venus", 0.815, 108}, {"Earth",1.0, 150}, 4. {"Mars", 0.107, 228}, {"Jupiter", 318, 778}, {"Saturn", 95.1, 1430}, 5. {"Uranus", 14.5, 2870}, {"Neptune", 17.2, 4500}, {"Pluto", 0.11, 5900} }; 6. cout << "Initial state" << endl; 7. printplanets(solarsystem, SOLAR_PLANETS); 8. sortplanetsbyrelmass(solarsystem, SOLAR_PLANETS); 9. cout << "\ nafter sorting by relative mass:" << endl; 10. printplanets(solarsystem, SOLAR_PLANETS); 11. sortplanetsbydist(solarsystem, SOLAR_PLANETS); 12. cout << "\ nafter sorting by distance from sun:" << endl; 13. printplanets(solarsystem, SOLAR_PLANETS); 14. sortplanetsbyname(solarsystem, SOLAR_PLANETS); 15. cout << "\ nafter sorting by name using strcmp and strcpy:" << endl; 16. printplanets(solarsystem, SOLAR_PLANETS); 17. cout << "\ n\ n"; 18. 19. return 0; 20.} ch 6-18

result of execution ch 6-19

Example of struct typedef struct MyDayOfYear { int year; int month; int day; }DayOfYear; DayOfYear dy1, dy2; dy1.year = 2013; dy1.month = 9; dy1.day = 2; Struct DayOfYear dy2.year = -999; // no compilation error; but is this logically correct? dy2.month = 500; // no compilation error; but is this logically correct? dy2.day = -45; // no compilation error; but is this logically correct? ch 6-20

Limitations of struct the data members in a struct variable can be accessed by any function if the address of the struct variable is known no member function that checks the correctness (validness) of the data ch 6-21

Similar to structures Classes Not only, just member data But also, adds member functions Integral to object-oriented programming Focus on objects Object: Contains data and operations Class: mold ( 주형형틀, 거푸집 ) or blue print to instantiate an object In C++, variables of class type are objects ch 6-22

Class Definitions Defined similar to structures Example: class DayOfYear name of new class type { public: access specifier! void output(); member function! int month; int day; }; Notice only member function s prototype Function s implementation is elsewhere ch 6-23

Declaring Objects Declared same as all variables Predefined types, structure types Example: DayOfYear today, birthday; Declares two objects of class type DayOfYear Objects include: Data Members: month, day Operations (member functions) output() ch 6-24

Class Member Access Members accessed same as structures Example: today.month today.day And to access member function: today.output(); Invokes member function ch 6-25

Class Member Functions Must define or "implement" class member functions Like other function definitions Can be after main() definition Must specify class: void DayOfYear::output() { } :: is scope resolution operator Instructs compiler "what class" member is from Item before :: called type qualifier ch 6-26

Class Member Functions Definition Notice output() member function s definition (in next example) Refers to member data of class No qualifiers Function used for all objects of the class Will refer to "that object s" data when invoked Example: today.output(); Displays "today" object s data ch 6-27

Complete Class Example: Display 6.3 Class With a Member Function (1 of 4) ch 6-28

Display 6.3 Class With a Member Function (2 of 4) ch 6-29

Display 6.3 Class With a Member Function (3 of 4) ch 6-30

Display 6.3 Class With a Member Function (4 of 4) ch 6-31

Dot and Scope Resolution Operator Used to specify "of what thing" they are members Dot operator: Specifies member of particular object Scope resolution operator (::) Specifies what class the function definition comes from ch 6-32

A Class s Place Class is full-fledged type! Just like data types int, double, etc. Can have variables of a class type We simply call them "objects" Can have parameters of a class type Pass-by-value Pass-by-reference Can use class type like any other type! ch 6-33

Encapsulation Any data type includes Data (range of data) Operations (that can be performed on data) Example: int data type has: Data: - 2 31 ~ + 2 31 Operations: +,-,*,/,%, logical, etc. Same with classes But WE specify data, and the operations to be allowed on our data! ch 6-34

Abstract Data Type (ADT) "Abstract" Programmers don t know details Abbreviated "ADT" Collection of data values together with set of basic operations defined for the values ADT s often "language-independent" We implement ADT s in C++ with classes C++ class "defines" the ADT Other languages implement ADT s as well ch 6-35

Encapsulation Encapsulation Means "bringing together as one" Declare a class get an object Object is "encapsulation" of Data values Operations on the data (member functions) ch 6-36

Information Hiding Principles of OOP Details of its implementations and its operations work not known to "user" of the class enhances the adaptability of new technology Data Abstraction Details of how data is manipulated within ADT/class not known to user Encapsulation Bring together data and operations, but keep "details" hidden ch 6-37

Encapsulation in Object Encapsulation and protection of private data Object outside program interface to outside Friend Functions - cin >> // standard input - cout << // standard output Public Member Functions - get() // read with validity check - set() // write with validity check Private Member Functions - house keeping Private Data Members ch 6-38

Public and Private Members Data in class almost always designated private in definition! Upholds principles of OOP Hide data from user Allow manipulation only via operations Which are member functions Public items (usually member functions) are "user-accessible" ch 6-39

Public and Private Example Modify previous example: class DayOfYear { public: void input(); void output(); private: int month; int day; }; Data now private Objects have no direct access ch 6-40

Public and Private Example 2 Given previous example Declare object: DayOfYear today; Object today can ONLY access public members cin >> today.month; // NOT ALLOWED! cout << today.day; // NOT ALLOWED! Must instead call public operations: today.input(); today.output(); ch 6-41

Public and Private Style Can mix & match public & private More typically place public first Allows easy viewing of portions that can be USED by programmers using the class Private data is "hidden", so irrelevant to users Outside of class definition, cannot change (or even access) private data ch 6-42

Accessor and Mutator Functions Object needs to "do something" with its data Call accessor member functions Allow object to read data Also called "get member functions" Simple retrieval of member data Mutator member functions Allow object to change data Manipulated based on application Set member functions ch 6-43

// Display 6.4 Class with Private Members #include <iostream> #include <cstdlib> using namespace std; class DayOfYear { public: void input( ); void output( ); void set(int newmonth, int newday); //Precondition: newmonth and newday form a possible date. void set(int newmonth); //Precondition: 1 <= newmonth <= 12 //Postcondition: The date is set to the first day of the given month. int getmonthnumber( ); //Returns 1 for January, 2 for February, etc. int getday( ); private: int month; int day; }; ch 6-44

int main( ) { DayOfYear today, bachbirthday; cout << "Enter today's date:\ n"; today.input( ); cout << "Today's date is "; today.output( ); cout << endl; bachbirthday.set(3, 21); cout << "J. S. Bach's birthday is "; bachbirthday.output( ); cout << endl; if ( today.getmonthnumber( ) == bachbirthday.getmonthnumber( ) && today.getday( ) == bachbirthday.getday( ) ) cout << "Happy Birthday Johann Sebastian!\ n"; else cout << "Happy Unbirthday Johann Sebastian!\ n"; } return 0; ch 6-45

//Uses iostream and cstdlib: void DayOfYear::set(int newmonth, int newday) { if ((newmonth >= 1) && (newmonth <= 12)) month = newmonth; else { cout << "Illegal month value! Program aborted.\ n"; exit(1); } if ((newday >= 1) && (newday <= 31)) day = newday; else { cout << "Illegal day value! Program aborted.\ n"; } } exit(1); //Uses iostream and cstdlib: void DayOfYear::set(int newmonth) { if ((newmonth >= 1) && (newmonth <= 12)) month = newmonth; else { cout << "Illegal month value! Program aborted.\ n"; } exit(1); } day = 1; ch 6-46

int DayOfYear::getMonthNumber( ) { return month; } int DayOfYear::getDay( ) { return day; } //Uses iostream and cstdlib: void DayOfYear::input( ) { cout << "Enter the month as a number: "; cin >> month; cout << "Enter the day of the month: "; cin >> day; if ((month < 1) (month > 12) (day < 1) (day > 31)) { cout << "Illegal date! Program aborted.\ n"; exit(1); } } ch 6-47

void DayOfYear::output( ) { switch (month) { case 1: cout << "January "; break; case 2: cout << "February "; break; case 3: cout << "March "; break; case 4: cout << "April "; break; case 5: cout << "May "; break; case 6: cout << "June "; break; case 7: cout << "July "; break; case 8: cout << "August "; break; case 9: cout << "September "; break; case 10: cout << "October "; break; case 11: cout << "November "; break; case 12: cout << "December "; break; default: cout << "Error in DayOfYear::output. Contact software vendor."; } // end switch } cout << day; ch 6-48

Separation of Interface and Implementation User of class need not see details of how class is implemented Principle of OOP encapsulation User only needs "rules" Called "interface" for the class In C++ public member functions and associated comments Implementation of class is hidden Member function definitions elsewhere User need not see them ch 6-49

Structures vs. Classes Structures Typically all members public No member functions Classes Typically all data members private Interface member functions public Technically, same Perceptionally, very different mechanisms ch 6-50

Thinking Objects Focus for programming changes Before algorithms center stage Object-Oriented Programming (OOP) data is focus Algorithms still exist They simply focus on their data Are "made" to "fit" the data Designing software solution Define variety of objects and how they interact ch 6-51

Summary 6-1 Structure is collection of different types Class used to combine data and functions into single unit -> object Member variables and member functions Can be public accessed outside class Can be private accessed only in a member function s definition Class and structure types can be formal parameters to functions ch 6-52

Summary 6-2 C++ class definition Should separate two key parts Interface: what user needs Implementation: details of how class works ch 6-53

6.1 Key ideas Homework 6 (1) C++ Object-Oriented programming 에서 encapsulation 이란무슨의미인가? Encapsulation 을함으로써어떤장점이있는가? (2) C++ Object-Oriented programming 에서 information hiding 이란무슨의미인가? 무엇을누구에게숨기는것인가? 6.2 Programming project 6-5. (class Fraction) 6.3 Programming project 6-8. (class Money) 6.4 Programming project 6-10. (class Temperature) ch 6-54