Upload
muriel-townsend
View
224
Download
0
Tags:
Embed Size (px)
Citation preview
11
Introduction to
Object Oriented Programming(Continued)
Cats
22
Objectives
You will be able to: Write and use classes with multiple
member variables. Use the "this" pointer in methods. Use "const" correctly in various places
within a method declaration. Understand #pragma once
3
Class Cat
Let's create a class to represent cats. Perhaps for use in a veterinarian's
office.
Each cat has: Name (Up to 20 letters) Weight Date of birth
4
New Project
Create a new C++ console project in Visual Studio.
5
New Project
6
New Project
7
Add main
8
Start with a Stub
Build and run
9
Program Running
We have a working program!
10
Add Class Cat
11
Add Class Cat
12
Add Class Cat
13
Class Cat
14
#pragma once
Same as the traditional guard:
#ifndef CAT_H
#define CAT_H
...
// Definition of class Cat
...
#endif
Not ISO Standard C++, but widely supported by current compilers.
15
Add Member Variables
Each cat has: Name (Up to 20 letters) Weight Date of birth
For Name, use a C string (array of char.)
For Weight, use a double. What about Date of Birth?
16
Date of Birth
The C standard library has a way to represent date/time values and functions to manipulate them. But it's complicated
Let's define a simple, easy to use, struct to represent dates in a user-friendly form: Day Month Year
17
Cat.h#pragma once
struct Date
{
int Day;
int Month;
int Year;
};
class Cat
{
private:
char name[21];
Date date_of_birth;
double weight;
public:
Cat(void);
~Cat(void);
};
18
Constructor
Add to Cat.h: Cat(const char* name_, Date dob, double weight_);
Why const? Makes name_ a read-only pointer. Guarantees that the function will not
modify the string that is passed as that argument.
DOES NOT mean that the argument has to be a constant.
19
Cat.cpp#include <cstring>
#include "Cat.h"
Cat::Cat(const char* name_, Date dob, double weight_)
{
strncpy(this->name, name_, 20);
this->name[20] = 0;
this->date_of_birth = dob;
this->weight = weight_;
}
Cat::~Cat(void)
{
}
20
The "this" Pointer
In any C++ method, the keyword this is a pointer to the object through which the method was called.
Not necessary in this case Or most cases.
Program would compile the same without it.
Build the project
21
A Bogus Warning
22
Suppressing the Warning#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include "Cat.h"
Cat::Cat(const char* name_, Date dob, double weight_)
{
The #define must the first line of the file in order to suppress Visual Studio's warning about strncpy.
Build and run.
23
Program Running
24
Accessor Functions
We can create Cat objects now, but we can't do anything with them.
To make the attributes of a Cat visible outside the class, create public we need to provide accessor functions. Functions that just return the value of
a member variable.
25
Accessor Functions
public:
Cat(const char* name_, Date dob, double weight_);
const char* Name() const { return name;};
Date Date_of_Birth() const { return date_of_birth;};
double Weight() const {return weight;};
~Cat(void);
};
What are all those const's ? Note that we are putting the
implementation of the methods in the class definition.
Functions will be compiled in line.
26
main.cpp
#include <iostream>
#include "Cat.h"
using namespace std;
int main()
{
cout << "This is program Cats\n";
Date dob = {12,1,2008};
Cat Fluffy("Fluffy", dob, 8.4);
cout << "Cat: " << Fluffy.Name() << " ";
cout << "DoB: "
<< Fluffy.Date_of_Birth().Month << "/"
<< Fluffy.Date_of_Birth().Day << "/"
<< Fluffy.Date_of_Birth().Year << " ";
cout << "Weight: " << Fluffy.Weight();
cin.get(); // Hold the window open.
return 0;
}
27
Program Running
28
Display Method
We normally want a method in each class that outputs the member variables to the screen.
Add a new public method to Cat.h: void Display() const;
29
In Cat.cpp#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <iostream>
#include "Cat.h"
using namespace std;
...
void Cat::Display() const
{
cout << "Cat: " << this->name << " ";
cout << "DoB: "
<< this->date_of_birth.Month << "/"
<< this->date_of_birth.Day << "/"
<< this->date_of_birth.Year << " ";
cout << "Weight: " << this->weight << endl;
}
30
main.cpp#include <iostream>
#include "Cat.h"
using namespace std;
int main()
{
cout << "This is program Cats\n";
Date dob = {12,1,2008};
Cat Fluffy("Fluffy", dob, 8.4);
…
Fluffy.Display();
cout << endl;
cin.get(); // Hold window open.
return 0;
}
Build and run.
31
Program Running
3232
Assignment
Do today's example for yourself if you have not done it in class.
Read Chapter 10.
End of Presentation