View
15
Download
0
Category
Preview:
DESCRIPTION
Week 4. Questions from Last Week Hand in Lab 2 Classes. Data Abstraction. An extension of the concept of a structure Gathers together a number of related variables e.g. Bank Account: Owner Balance transactions. Defining your own Types. Built-in types have allowed operations - PowerPoint PPT Presentation
Citation preview
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Week 4
• Questions from Last Week
• Hand in Lab 2
• Classes
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Date Week Topic ChapterHand Out Due Back Test
6-Jan-03 1Administrivia / Overview / Intro to C++ / Control Structures 1
13-Jan-03 2 Functions / Arrays, Pointers, Strings 2,3,4,5Lab 1 / Lab 2
20-Jan-03 3 Classes, Data Abstraction 6 Lab 1 5%27-Jan-03 4 More on Classes 7 Lab 3 Lab 2 5%3-Feb-03 5 No Lecture
10-Feb-03 6 Operator Overloading 8 Lab 4 Lab 3 5%17-Feb-03 Reading Break24-Feb-03 7 Inheritance 9 Lab 4 5% Midterm 25%3-Mar-03 8 Virtual Functions and Polymorphism 10 Lab 5
10-Mar-03 9 Stream IO 11 Lab 6 Lab 5 5%17-Mar-03 10 Templates 12,13 Lab 7 Lab 6 5%24-Mar-03 11 Exceptions31-Mar-03 12 File IO 14 Lab 7 5%
??? Exam Final 40%
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Data Abstraction
• An extension of the concept of a structure
• Gathers together a number of related variables
• e.g. Bank Account:– Owner– Balance– transactions
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Defining your own Types
• Built-in types have allowed operations– Can’t multiply strings– Can’t use ++ on a float– Can’t pass an integer to strlen()
• In the same vein, you choose the operations for your own types– Bank account can have deposit and withdraw
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
An Object is a Clump
• Information, Variables, Data, State, Attributes
• Behaviour, Methods, Functions, Operations, Services
• All belong together
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Defining a Class
//BankAccount.h
class BankAccount
{
float Balance;
void Deposit(float amount);
bool Withdraw (float amount);
};• Don’t forget that final semi colon!
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Inside and Outside
PrivateA ttributes
andm ethods
Public A ttributesand M ethods
System
M yO bject
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Defining a Class
//BankAccount.h class BankAccount{private: float Balance;public: void Deposit(float amount); bool Withdraw (float amount);};
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Creating Objects
• An object is an instance of a class
• Class is BankAccount: object is my account, another object is someone else’s
#include BankAccount.h
// ...
BankAccount KateChequing;
BankAccount BillSaving;
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Private means no access
• All code can access public functions
KateChequing.Deposit(50);
• But not private variables
KateChequing.Balance = 100;
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Implementing a Class
//BankAccount.cpp #include “BankAccount.h”void BankAccount::Deposit(float amount)
{ Balance += amount;}
• :: is called Scope Resolution Operator
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Encapsulation
• Holding all the rules together• Not forcing users of a class to know what the
inside means• Retaining the freedom to change the inside of a
class– Variable name– Type (int, float)– Units or other “meaning”
• Information hiding – design information
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Gets and Sets
class Truck
{
private:
float currentweight;
public:
float getcurrentweight();
void setcurrentweight(float w);
};
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Constructors
• Sometimes your only motivation for a set is to give something an initial value
• A constructor can be used to initialize the member variables of an object as it is created
• Name is always the name of the class• Never a return type• Parameters vary
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Default Constructor
• No parameters• Runs when instances are created without
parameters
class BankAccount
{
// ...
BankAccount();
};
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Default Constructor
//BankAccount.cpp
#include BankAccount.h
BankAccount::BankAccount()
{
Balance = 0;
}
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Overloaded Functions
• In C, two functions cannot have the same name
• In C++, they can, as long as something else differs:– Class– Parameters
• Return type or placeholder names don’t matter
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Overloaded Constructors
class BankAccount
{
// ...
BankAccount();
BankAccount(float openingbalance);
BankAccount(float a); // not allowed
BankAccount(char* name);
};
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Passing Parameters to Constructors
BankAccount KateChequing(50.0);• Uses the constructor that takes a float
BankAccount BillSaving(“Bill”);• Uses the constructor that takes a char*
BankAccount KateChequing(1000);• Uses the constructor that takes a float, and
converts the int to float first
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Don’t Do This
BankAccount KateChequing();• This is declaring a function called
KateChequing!
BankAccount GetAccount(int x);
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Initializer Syntax
//BankAccount.cpp
#include BankAccount.h
BankAccount::BankAccount() :
Balance(0)
{
}• Slightly more efficient and readable
• Becomes important once inheritance enters the picture
• Also useful when a member variable is actually an object
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Destructors
• Opposite of constructors
• Name is ~ plus name of class– Joke based on boolean syntax
• Never take arguments
• No return type
• Rarely explicitly called
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Leaving Scope
// ... Program fragment
{
int i;
BankAccount Kate(1000);
}
• Destructor runs as Kate leaves scope
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Coding Destructors
class BankAccount{// ... ~BankAccount(); };
//BankAccount.cpp #include BankAccount.hBankAccount::~BankAccount(){ cout << “There goes your money”;}
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Reuse Thoughts• Objects should be self contained• Constructors should set good default values• If there is no default value for something, every
constructor should demand it, so that it cannot remain uninitialized
• You should add all the methods others are likely to use
• Don’t add gets and sets without thinking• The object should handle its own error checking
– Avoid side-effects such as error messages
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Inline functions
• Dramatically improve performance
• Compiler actually expands the code like a macro
• You retain the protection of encapsulation at no performance cost
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Inline Gets and Sets
class Truck{private: float currentweight;public: float getcurrentweight() { return currentweight; } void setcurrentweight(float w) { currentweight = w;}};
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Error checking
class Truck{private: float currentweight;public: float getcurrentweight() { return currentweight; } void setcurrentweight(float w) { if (w > 0) currentweight = w;}};
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
Private Functions
• Serve some useful purpose
• You don’t want the whole system to be able to call them
• You aren’t willing to commit they will always exist
• Can only be called from inside the object itself
Monday, Jan 27, 2003 Kate Gregorywith material from Deitel and Deitel
For Next class
• Read chapter 7
• Get ready for Lab 3 to be handed out
Recommended