week 4

Post on 31-Dec-2015

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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

top related