CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class...
Transcript of CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class...
![Page 1: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/1.jpg)
CIS 190: C/C++ Programming
Lecture 8
Classes in C++
1
![Page 2: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/2.jpg)
Outline
• Procedural Programming vs OOP
• Classes
– Example: Morphing from Struct
– Basics
– Access
– Constructors
– Overloading
• Livecoding
2
![Page 3: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/3.jpg)
Procedural Programming
• up until now, everything we’ve been doing has been procedural programming
• code is divided into multiple procedures – procedures operate on data (structures), when
given correct number and type of arguments
• examples: PrintTrain(), ReadSingerFile(), DestroyList(), ProcessEvents(), etc.
3
![Page 4: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/4.jpg)
Object-Oriented Programming
• now that we’re using C++, we can start taking advantage of object-oriented programming
• adding OOP to C was one of the driving forces behind the creation of C++ as a language
– C++’s predecessor was actually called “C with Classes”
4
![Page 5: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/5.jpg)
Object-Oriented Programming
• in OOP, code and data are combined into a single entity called a class
– each instance of a given class is an object of that class type
• principles of Object-Oriented Programming
– encapsulation
– inheritance
– polymorphism
5
![Page 6: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/6.jpg)
OOP: Encapsulation
• encapsulation is a form of information hiding and abstraction
• data and functions that act on that data are located in the same place (inside a class)
• ideal: separate the interface/implementation so that you can use the former without any knowledge of the latter
6
![Page 7: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/7.jpg)
OOP: Inheritance
• inheritance allows us to create and define new classes from an existing class
• this allows us to re-use code
– faster implementation time
– fewer errors
– easier to maintain/update
7
![Page 8: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/8.jpg)
OOP: Polymorphism
• polymorphism is when a single name can have multiple meanings
– normally used in conjunction with inheritance
• we’ll look at one form of polymorphism today:
– overloading functions
8
![Page 9: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/9.jpg)
Outline
• Procedural Programming vs OOP
• Classes
– Example: Morphing from Struct
– Basics
– Access
– Constructors
– Overloading
• Livecoding
9
![Page 10: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/10.jpg)
Example: Date
typedef struct date {
int month;
int day;
int year;
} DATE;
10
![Page 11: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/11.jpg)
Parts of a Struct
typedef struct date {
int month;
int day;
int year;
} DATE;
11
name of the struct
![Page 12: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/12.jpg)
Parts of a Struct
typedef struct date {
int month;
int day;
int year;
} DATE;
12
name of the struct
(optional) shorter name via typedef
![Page 13: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/13.jpg)
Parts of a Struct
typedef struct date {
int month;
int day;
int year;
} DATE;
13
name of the struct
(optional) shorter name via typedef
member variables of the structure
![Page 14: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/14.jpg)
Using a Struct
• if we want to print a date using the struct, what should our function prototype be?
____ PrintDate(________);
14
![Page 15: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/15.jpg)
Using a Struct
• if we want to print a date using the struct, what should our function prototype be?
void PrintDate(DATE day);
15
![Page 16: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/16.jpg)
Using a Struct
• if we want to print a date using the struct, what should our function prototype be?
void PrintDate(DATE day);
• if we want to change the year of a date, what should our function prototype be?
____ ChangeYear(__________________);
16
![Page 17: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/17.jpg)
Using a Struct
• if we want to print a date using the struct, what should our function prototype be?
void PrintDate(DATE day);
• if we want to change the year of a date, what should our function prototype be?
void ChangeYear(DATE day, int year);
17
![Page 18: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/18.jpg)
Morphing from Struct to Class
typedef struct date {
int month;
int day;
int year;
} DATE;
18
![Page 19: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/19.jpg)
Morphing from Struct to Class
struct date {
int month;
int day;
int year;
};
• remove the typedef – we won’t need it for the class
19
![Page 20: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/20.jpg)
Morphing from Struct to Class
class date {
int month;
int day;
int year;
};
• change struct to class
20
![Page 21: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/21.jpg)
Morphing from Struct to Class
class Date {
int month;
int day;
int year;
};
• capitalize date – according to the style guide, classes are capitalized, while structs are not
21
![Page 22: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/22.jpg)
Morphing from Struct to Class
class Date {
int m_month;
int m_day;
int m_year;
};
• add m_ to the variable names – classes are more complicated, this can help prevent confusion about which vars are member vars
22
![Page 23: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/23.jpg)
Morphing from Struct to Class
class Date {
public:
int m_month;
int m_day;
int m_year;
};
• make the variables public, to be able to access them
– by default, members of a class are private 23
![Page 24: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/24.jpg)
Morphing from Struct to Class
class Date {
public:
int m_month;
int m_day;
int m_year;
};
• syntax highlighted colors change
24
![Page 25: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/25.jpg)
Outline
• Procedural Programming vs OOP
• Classes
– Example: Morphing from Struct
– Basics
– Access
– Constructors
– Overloading
• Livecoding
25
![Page 26: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/26.jpg)
Functions in Classes
• unlike structs, classes have member functions along with their member variables
• member functions go inside the class declaration
• member functions are called on an object of that class type
26
![Page 27: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/27.jpg)
Functions in Classes
• unlike structs, classes have member functions along with their member variables
• member functions go inside the class declaration
• member functions are called on an object of that class type iStream.open(“file.txt”);
27
![Page 28: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/28.jpg)
Functions in Classes
• unlike structs, classes have member functions along with their member variables
• member functions go inside the class declaration
• member functions are called on an object of that class type iStream.open(“file.txt”);
28
![Page 29: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/29.jpg)
Example: OutputMonth() Function
• let’s add a function to the class that will print out the name of the month class Date {
public:
int m_month;
int m_day;
int m_year;
};
29
![Page 30: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/30.jpg)
Example: OutputMonth() Function
• let’s add a function to the class that will print out the name of the month class Date {
public:
int m_month;
int m_day;
int m_year;
void OutputMonth();
};
30
![Page 31: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/31.jpg)
Example: OutputMonth() Function
• let’s add a function to the class that will print out the name of the month, given the number class Date {
public:
int m_month;
int m_day;
int m_year;
void OutputMonth();
};
31
function prototype
![Page 32: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/32.jpg)
OutputMonth()
void OutputMonth();
• nothing is passed in to the function – why?
32
![Page 33: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/33.jpg)
OutputMonth() Prototype
void OutputMonth();
• nothing is passed in to the function
• because it only needs access to see the variable m_month
– which is a member variable of the Date class
– just like OutputMonth() is a member function
33
![Page 34: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/34.jpg)
OutputMonth() Definition
void Date::OutputMonth() {
}
34
![Page 35: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/35.jpg)
OutputMonth() Definition
void Date::OutputMonth() {
}
35
specify class name; more than one class can have a function with the same name
![Page 36: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/36.jpg)
OutputMonth() Definition
void Date::OutputMonth() {
}
36
this double colon is called the scope resolution operator, and associates the member function OutputMonth() with the class Date
![Page 37: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/37.jpg)
OutputMonth() Definition
void Date::OutputMonth() {
switch (m_month) {
case 1: cout << “January ”; break;
case 2: cout << “February ”; break;
case 3: cout << “March ”; break;
/* etc */
default:
cout << “Error in Date::OutputMonth”;
}
}
37
![Page 38: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/38.jpg)
OutputMonth() Definition
void Date::OutputMonth() {
switch (m_month) {
case 1: cout << “January ”; break;
case 2: cout << “February ”; break;
case 3: cout << “March ”; break;
/* etc */
default:
cout << “Error in Date::OutputMonth”;
}
}
38
we can directly access m_month because it is a member variable of the Date class, to which OutputMonth() belongs
![Page 39: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/39.jpg)
Print Functions
• is the following valid code? cout << today.OutputMonth();
39
![Page 40: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/40.jpg)
Print Functions
• is the following valid code? cout << today.OutputMonth();
• no, because OutputMonth() returns nothing for cout to print
– if the function returned a string, this would be valid code
40
![Page 41: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/41.jpg)
Using the Date Class Date today;
41
![Page 42: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/42.jpg)
Using the Date Class Date today;
42
variable today is an instance of the class Date it is an object of type Date
![Page 43: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/43.jpg)
Using the Date Class Date today;
cout << “Please enter dates as DD MM YYYY”
<< endl;
cout << “Please enter today’s date: ”;
cin >> today.m_day >> today.m_month
>> today.m_year;
43
![Page 44: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/44.jpg)
Using the Date Class Date today;
cout << “Please enter dates as DD MM YYYY”
<< endl;
cout << “Please enter today’s date: ”;
cin >> today.m_day >> today.m_month
>> today.m_year;
44
when we are not inside the class (as we were in the OutputMonth() function) we must use the dot operator to access today’s member variables
![Page 45: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/45.jpg)
Using the Date Class Date today;
cout << “Please enter dates as DD MM YYYY”
<< endl;
cout << “Please enter today’s date: ”;
cin >> today.m_day >> today.m_month
>> today.m_year;
cout << “Today’s date is “;
today.OutputMonth();
cout << today.m_day << “, “
<< today.m_year << endl;
45
![Page 46: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/46.jpg)
Using the Date Class Date today;
cout << “Please enter dates as DD MM YYYY”
<< endl;
cout << “Please enter today’s date: ”;
cin >> today.m_day >> today.m_month
>> today.m_year;
cout << “Today’s date is “;
today.OutputMonth();
cout << today.m_day << “, “
<< today.m_year << endl;
46
we also use the dot operator to call the member function OutputMonth() on the Date object today again, note that we do not need to pass in the member variable m_month
![Page 47: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/47.jpg)
Outline
• Procedural Programming vs OOP
• Classes
– Example: Morphing from Struct
– Basics
– Access
– Constructors
– Overloading
• Livecoding
47
![Page 48: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/48.jpg)
Access Specifiers
• in our definition of the Date class, everything was public – this is not good practice!
• why?
48
![Page 49: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/49.jpg)
Access Specifiers
• we have three different options for access specifiers, each with their own role:
– public
– private
– protected
• specify access for members inside the class
49
![Page 50: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/50.jpg)
Toy Example
class Date {
public:
int m_month;
private:
int m_day;
protected:
int m_year;
};
50
![Page 51: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/51.jpg)
Using Public, Private, Protected
• public
– anything that has access to a Date object also has access to all public member variables and functions
• not normally used for variables; used for most functions
• need to have at least one item be public
51
![Page 52: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/52.jpg)
Using Public, Private, Protected
• private
– private members variables and functions can only be accessed by member functions of the Date class; cannot be accessed in main(), etc.
• if not specified, members default to private
– should specify anyway – good coding practices!
52
![Page 53: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/53.jpg)
Using Public, Private, Protected
• protected
– protected member variables and functions can only be accessed by member functions of the Date class, and by member functions of any derived classes
– (we’ll cover this later)
53
![Page 54: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/54.jpg)
Access Specifiers for Date Class
class Date {
???????:
void OutputMonth();
???????:
int m_month;
int m_day;
int m_year;
};
54
![Page 55: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/55.jpg)
Access Specifiers for Date Class
class Date {
public:
void OutputMonth();
private:
int m_month;
int m_day;
int m_year;
};
55
![Page 56: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/56.jpg)
New Member Functions
• now that m_month, m_day, and m_year are private, how do we give them values, or retrieve those values?
56
![Page 57: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/57.jpg)
New Member Functions
• now that m_month, m_day, and m_year are private, how do we give them values, or retrieve those values?
• write public member functions to provide indirect, controlled access for the user
– ideal: programmer only knows interface (public functions) not implementation (private variables)
57
![Page 58: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/58.jpg)
Member Function Types
• there are many ways of classifying types, but here’s a few of the basics we’ll use:
• accessor functions
• mutator functions
• auxiliary functions
58
![Page 59: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/59.jpg)
Member Functions: Accessor
• convention: start with Get
• allow retrieval of private data members
• examples: int GetMonth();
int GetDay();
int GetYear();
59
![Page 60: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/60.jpg)
Member Functions: Mutator
• convention: start with Set
• allow changing the value of a private data member
• examples: void SetMonth(int m);
void SetDay(int d);
void SetYear(int y);
60
![Page 61: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/61.jpg)
Member Functions: Auxiliary
• provide support for the operations
– public if generally called outside function
– private/protected if only called by member functions
• examples: void OutputMonth(); public
void IncrementDate(); private
61
![Page 62: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/62.jpg)
Access Specifiers for Date Class
class Date {
public:
void OutputMonth();
int GetMonth();
int GetDay();
int GetYear();
void SetMonth(int m);
void SetDay (int d);
void SetYear (int y);
private:
int m_month;
int m_day;
int m_year;
};
62
![Page 63: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/63.jpg)
Access Specifiers for Date Class
class Date {
public:
void OutputMonth();
int GetMonth();
int GetDay();
int GetYear();
void SetMonth(int m);
void SetDay (int d);
void SetYear (int y);
private:
int m_month;
int m_day;
int m_year;
};
63
for the sake of brevity, we’ll leave out the accessor and mutator functions from now on
![Page 64: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/64.jpg)
Outline
• Procedural Programming vs OOP
• Classes
– Example: Morphing from Struct
– Basics
– Access
– Constructors
– Overloading
• Livecoding
64
![Page 65: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/65.jpg)
Constructors
• special member functions used to create (or “construct”) new objects
• automatically called when an object is created
– implicit: Date today;
– explicit: Date today(10, 15, 2014);
• initializes the values of all data members
65
![Page 66: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/66.jpg)
Date Class Constructors
class Date {
public:
void OutputMonth();
Date (int m, int d, int y);
private:
int m_month;
int m_day;
int m_year;
};
66
![Page 67: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/67.jpg)
Date Class Constructors
class Date {
public:
void OutputMonth();
Date (int m, int d, int y);
private:
int m_month;
int m_day;
int m_year;
};
exact same name as the class
67
![Page 68: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/68.jpg)
Date Class Constructors
class Date {
public:
void OutputMonth();
Date (int m, int d, int y);
private:
int m_month;
int m_day;
int m_year;
};
no return type, not even void
68
![Page 69: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/69.jpg)
Constructor Definition
Date::Date (int m, int d, int y)
{
}
69
![Page 70: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/70.jpg)
Constructor Definition
Date::Date (int m, int d, int y)
{
m_month = m;
m_day = d;
m_year = y;
}
70
![Page 71: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/71.jpg)
Constructor Definition
Date::Date (int m, int d, int y)
{
m_month = m;
m_day = d;
m_year = y;
}
71
![Page 72: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/72.jpg)
Constructor Definition
Date::Date (int m, int d, int y)
{
if (m > 0 && m <= 12) { m_month = m; }
else { m_month = 1; }
if (d > 0 && d <= 31) {
m_day = d; }
else { m_day = 1; }
if (y > 0 && y <= 2100) {
m_year = y; }
else { m_year = 1; }
}
72
![Page 73: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/73.jpg)
Constructor Definition
Date::Date (int m, int d, int y)
{
if (m > 0 && m <= 12) { m_month = m; }
else { m_month = 1; }
if (d > 0 && d <= 31) {
m_day = d; }
else { m_day = 1; }
if (y > 0 && y <= 2100) {
m_year = y; }
else { m_year = 1; }
}
73
is this the best way to handle this?
![Page 74: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/74.jpg)
Constructor Definition
Date::Date (int m, int d, int y)
{
if (m > 0 && m <= 12) { m_month = m; }
else { m_month = 1; }
if (d > 0 && d <= 31) {
m_day = d; }
else { m_day = 1; }
if (y > 0 && y <= 2100) {
m_year = y; }
else { m_year = 1; }
}
74
is this the best way to handle this?
what might be a better solution?
![Page 75: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/75.jpg)
Constructor Definition
Date::Date (int m, int d, int y)
{
SetMonth(m);
SetDay(d);
SetYear(y);
}
• this allows us to reuse already written code
75
![Page 76: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/76.jpg)
Outline
• Procedural Programming vs OOP
• Classes
– Example: Morphing from Struct
– Basics
– Access
– Constructors
– Overloading
• Livecoding
76
![Page 77: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/77.jpg)
Overloading
• we can define multiple versions of the constructor – we can overload it
• different constructors for:
– when all values are known
– when no values are known
– when some subset of values are known
77
![Page 78: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/78.jpg)
• have the constructor set user-supplied values
Date::Date (int m, int d, int y)
{
SetMonth(m);
SetDay(d);
SetYear(y);
}
All Known Values
78
![Page 79: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/79.jpg)
• have the constructor set user-supplied values
Date::Date (int m, int d, int y)
{
SetMonth(m);
SetDay(d);
SetYear(y);
}
All Known Values
invoked when constructor is called with all arguments
79
![Page 80: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/80.jpg)
No Known Values
• have the constructor set all default values
Date::Date ()
{
SetMonth(1);
SetDay(1);
SetYear(1);
}
80
![Page 81: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/81.jpg)
No Known Values
• have the constructor set all default values
Date::Date ()
{
SetMonth(1);
SetDay(1);
SetYear(1);
}
invoked when constructor is called with no arguments
81
![Page 82: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/82.jpg)
Some Known Values
• have the constructor set some default values
Date::Date (int m, int d)
{
SetMonth(m);
SetDay(d);
SetYear(1);
}
82
![Page 83: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/83.jpg)
Some Known Values
• have the constructor set some default values
Date::Date (int m, int d)
{
SetMonth(m);
SetDay(d);
SetYear(1);
}
invoked when constructor is called with two arguments
83
![Page 84: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/84.jpg)
Overloaded Date Constructor
• so far we have the following constructors:
Date::Date (int m, int d, int y);
Date::Date (int m, int d);
Date::Date ();
84
![Page 85: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/85.jpg)
Overloaded Date Constructor
• so far we have the following constructors:
Date::Date (int m, int d, int y);
Date::Date (int m, int d);
Date::Date ();
• would the following be a valid constructor?
Date::Date (int m, int y);
85
![Page 86: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/86.jpg)
Avoiding Multiple Constructors
• defining multiple constructors for different sets of known values is a lot of unnecessary code duplication
• we can avoid this by setting default parameters in our constructors
86
![Page 87: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/87.jpg)
Default Parameters
• in the function prototype only, provide default values you want the constructor to use
Date (int m , int d ,
int y );
87
![Page 88: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/88.jpg)
Default Parameters
• in the function prototype only, provide default values you want the constructor to use
Date (int m = 10, int d = 15,
int y = 2014);
88
![Page 89: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/89.jpg)
Default Parameters
• in the function definition nothing changes
Date::Date (int m, int d, int y) {
SetMonth(m);
SetDay(d);
SetYear(y);
}
89
![Page 90: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/90.jpg)
Using Default Parameters
• the following are all valid declarations:
Date graduation(5,18,2015);
Date today;
Date halloween(10,31);
Date july(4);
x
x
x
x4/6/2014
90
![Page 91: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/91.jpg)
Using Default Parameters
• the following are all valid declarations:
Date graduation(5,18,2015);
Date today;
Date halloween(10,31);
Date july(4);
// graduation: 5/18/2015
// today: 10/15/2014
// halloween: 10/31/2014
// july: 4/15/2014
91
![Page 92: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/92.jpg)
Using Default Parameters
• the following are all valid declarations:
Date graduation(5,19,2014);
Date today;
Date halloween(10,31);
Date july(4);
// graduation: 5/19/2014
// today: 10/15/2014
// halloween: 10/31/2014
// july: 4/15/2014
NOTE: when you call a constructor with no arguments, you do not give it empty parentheses
92
![Page 93: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/93.jpg)
Default Constructors
• a default constructor is provided by compiler
– will handle declarations of Date instances
• this is how we created Date objects in the slides before we declared and defined our constructor
93
![Page 94: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/94.jpg)
Default Constructors
• but, if you create any other constructor, the compiler doesn’t provide a default constructor
• so if you create a constructor, make a default constructor too, even if its body is just empty
Date::Date ()
{
/* empty */
} 94
![Page 95: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/95.jpg)
Function Overloading
• functions in C++ are uniquely identified by both their names and their parameters
– but NOT their return type!
• we can overload any kind of function
– we can even use default values, like with constructors
95
![Page 96: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/96.jpg)
Overloading Example
void PrintMessage (void) {
cout << “Hello World!” << endl;
}
void PrintMessage (string msg) {
cout << msg << endl;
}
96
![Page 97: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/97.jpg)
Outline
• Procedural Programming vs OOP
• Classes
– Example: Morphing from Struct
– Basics
– Access
– Constructors
– Overloading
• Livecoding
97
![Page 98: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/98.jpg)
Example: Rectangle Class
• width and height member variables
• accessors and mutators
• functions for IsSquare(), CalcArea(), CalcPerim(), and PrintRectInfo()
• what happens when we give a constructor that uses default parameters and calls mutators invalid arguments?
98 LIVECODING LIVECODING
![Page 99: CIS 190: C/C++ Programmingcis190/fall2014/lectures/08/lec08.pdf · Morphing from Struct to Class class Date { int m_month; int m_day; int m_year; }; •add m_ to the variable names](https://reader033.fdocuments.net/reader033/viewer/2022050122/5f526626b61e95199559ce2e/html5/thumbnails/99.jpg)
Parts of a Class (so far)
• class name
• member variables
• member functions
– constructors
• default parameters
– accessors
– mutators
– auxiliary (private and public)
99
private public protected