0% found this document useful (0 votes)
8 views41 pages

Understanding C++ Structs and Classes

classes in c++

Uploaded by

petragoje2007
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views41 pages

Understanding C++ Structs and Classes

classes in c++

Uploaded by

petragoje2007
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd

SWE 2314

Classes

 Read Malik, Chapter 10.


Review: What is a struct?
• Recall that a struct is a collection of a fixed
number of components (called members),
accessed by name.
– The members may be of different types.
• structs are very useful because they let us
design complex data structures that represent
real-world objects.
– Recall example (on next slide) of houseType.

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 2


Review: Example of a struct

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 3


Data Members versus Function
Members
• In our examples so far, structs have
contained data members but not function
members.
– In other words, the
structs in our
examples have
contained variables,
but not functions.

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 4


Limitations of structs
• In the C language, structs could only
contain data members.
• C programmers came to see this as a
limitation, and realized that it would be nice to
be able to define structs that contain
function members as well as data members.
• This realization, along with other ideas about
how to improve structs, led to the
development of C++.
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 5
Classes and Object-Oriented
Programming
• The main new idea in C++ is the class, which is
a generalization of the struct.
• Hand-in-hand with the introduction of classes
is a whole new way of thinking about a
program—as a collection of interacting
objects. This new way of thinking is called
object-oriented programming (OOP), in
contrast to the procedural programming used
in C and other older languages.
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 6
Defining a Class
• A class definition looks a lot like a struct
definition.
• Syntax:

• Just as with struct definitions, a class definition


defines a new data type, but no memory is allocated
until we declare a variable of this type.

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 7


Defining a Class (cont’d.)
• Each class member in
classMemberList can
be a variable (data member)
or a function (function member).
– Data members are like the members we’ve used in
structs.
– For a function member, usually just the function
prototype is listed is listed in the class definition.
The function definition is given elsewhere in the
program.
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 8
Defining a Class: Example

Seven
function
members

Three
data
members

 Note the new keywords public and private,


which are called member access specifiers.
A New Idea: Code Within a Class
 The ability to
create functions
inside a class
gives rise to a
new distinction
that we haven’t
had to think
about until now: some code (such as the
code inside setTime) “lives” inside a
class while other code (such as the code
in a program’s main function) lives
outside of any class.
Member Access Specifiers
• Each class member falls into one of the following
categories, as designated by the access specifiers:
– public
• The member can be accessed by code inside or outside the
class.
– private (This is the default.)
• The member be accessed by code inside the class, but not
by code outside the class.
– protected
• "In between" public and private. Only needed if you
use inheritance (discussed in Chapter 11).
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 11
Member Access Specifiers:
Example
 Since hr is a
private member
of clockType,
code in
clockType’s
function
members (such
as setTime)
can access hr,
but code outside of the class (such as in
main) cannot.
Member Access Specifiers:
Example (cont'd.)

 On the other
hand, since
setTime() is a
public member,
any code
can call it.
 In this example,
all of the function
members are public and all of the data
members are private. This is fairly
common, but it's not always the case.
Implementation of Member Functions
• As seen above, usually only the prototypes of
a class's function members are included in the
class definition itself.
• Your program must also contain the code for
these functions. This code is called the
function's implementation.
• Note the syntax on the next slide, which uses
the scope resolution operator ::

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 14


Implementation of Member
Functions: Example

Class name followed


by scope resolution
operator

 This code is outside of the class definition,


so you must precede the function's name
with clockType:: to indicate that this is a
member function of the clockType class,
rather than just a regular function.
Separating the Definition from the
Implementation
 Though not required, in programs that use
classes we usually separate the code into
the following files:
1. A header file that holds the class definition.
2. An implementation file that holds the
implementations of the class’s member
functions.
3. A file that holds the client program, which
uses the class defined in the other two files.
Here is where you’ll put your program’s main()
function.
 For a program that uses more than one class,
files 1 and 2 will be repeated for each class.
Separating the Definition from the
Implementation: Example
Including the Header File in the
Other Files
 On the previous slide, note that the
implementation file ([Link]) and the
client program ([Link])
include the header file (clockType.h).
 To do this, we use the same #include
preprocessor directive that we use for
library files, but we enclose the header file’s
name in double quotes instead of angle
brackets: Including a library file
#include <iostream>
#include "clockType.h"
Including our own
header file
Getting Started with a Program
that Uses clockType
1. Create a new project named clockPractice and
start a new source-code file named
[Link].
2. Download the files named clockType.h and
[Link] from the website and place
them in your project’s folder that contains
[Link].
3. In your project’s Solution Explorer, right-click
Source Files and select Add > Existing
Item…. Then select [Link] and click
Add.
4. In [Link], type the code shown on the
next slide.
Getting Started with a Program
that Uses clockType (cont’d.)

5. Run the program.


6. Modify main to call [Link]()
and then call [Link]() again.
Variable (Object) Declaration
• As we’ve seen, once a class has been defined
and implemented, you can declare variables of
that class type:
clockType myClock;
• A class variable is called a
class object or class instance,
or simply an object.
• Each object has its own copy of
the data members (hr, min, and sec).
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 21
Accessing Class Members From
Outside
• Code outside of the member functions (such as in
the main() function of the client program) can
access an object's public members, using the
syntax:

– The dot (.) is the member access operator (same as


for structs).
• But code outside of the member functions cannot
access an object's private members.
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 22
Accessing Class Members From
Outside: Example

Accessing myClock's
public members: okay!

Trying to access
myClock's private
members: no good!

 This code is in the client program's


main() function, so it is outside of the
class's member functions.
Accessing Class Members Within the
Class Code
• Code within a member function of the class
can access the object's public and
private members directly by name (no dot
operator needed).

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 24


Accessing Class Members Within
the Class Code: Example

Accessing an object's
private members: okay!

 This code is in the member function


printTime(), so it can access public and
private members.
 Note that we don’t need to precede the
member name with the object's name.
Constructors
• A constructor is a special member function
that runs automatically when a new class
object is created. Its purpose is to initialize the
object’s data members.
• A constructor’s name must be the same as the
name of the class.
• A constructor has no type (not even void).
• Unlike other functions, constructors cannot be
explicitly called in code.
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 26
Constructors: Example
In the class’s header In the class’s
file: implementation file:
Constructors (cont’d.)
• Constructors are functions, but they serve a
very special purpose. They run automatically
whenever you declare a class object. You do
not call them directly in your code using the
usual function-call syntax. Constructor is called here.

• This main() code


is illegal because
it tries to call a
constructor.
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 28
Constructors (cont’d.)
• A class can have more than one constructor.
– This is an example of function overloading, which we
looked at briefly in Unit 7.
– Recall from Unit 7 that each overloaded function
must have a different formal parameter list.
• Example of overloaded constructor functions:
clockType();
clockType(int hours, int minutes, int seconds);

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 29


Multiple Constructors: Example
In the class’s header In the class’s
file: implementation file:
Invoking a Constructor
• A constructor is automatically executed when
you declare a class object.
• Which of the constructors is executed
depends on whether you specify parameters
in parentheses after the class object’s name
when you declare it.
• Examples:
clockType yourClock;
clockType myClock(4, 3, 16);
C++ Programming: From Problem Analysis to Program Design, Seventh Edition 31
Invoking the Default Constructor
• To invoke the default constructor, don’t
specify any parameters after the class object’s
name when you declare it:

• Example:
clockType yourClock;

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 32


Invoking a Constructor with
Parameters
• Syntax:
• Example:
clockType myClock(4, 3, 16);
• The number and type of arguments should
match the formal parameters (in the order
given) of one of the constructors.

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 33


Constructors and Default Parameters
• A constructor can have default parameters.
– The rules for declaring formal parameters are the
same as for declaring default formal parameters in
any function. (Recall Unit 7.)
– Actual parameters are passed according to the
same rules used for any function.
• Default constructor: a constructor with no
parameters or with all default parameters.

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 34


Built-in Operations on Classes
• As with structs, aggregate arithmetic, relational, and
input/output operations are not allowed on class objects, but
aggregate assignment is allowed:
clockType myClock, yourClock;

myClock = yourClock + 1; //Error

if (myClock >= yourClock) //Error

cout << myClock; //Error

cin >> myClock; //Error

myClock = yourClock; //Okay!!


C++ Programming: From Problem Analysis to Program Design, Seventh Edition 35
Arrays, structs, and Class Objects:
A Comparison

(and class object)

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 36


Class Objects and Functions
• Objects can be passed as parameters to
functions by value or by reference.
• If an object is passed by value, a copy must be
made of the object’s data members. For large
objects, this may require a lot of time and
memory, degrading performance.
• If an object is passed by reference, no copy is
made—may result in better performance.

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 37


Class Objects and Functions (cont’d.)
• Passing by reference is an efficient way to pass
an object as a parameter.
– Potential Problem: when passing by reference, the
actual parameter is changed if the formal
parameter is changed.
– Solution: use const in the formal parameter list.
This prevents the function from changing the
parameter’s value. Example from clockType:

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 38


Another Use of const
• The previous slide showed how to use const
to prevent a function from changing the value
of a reference parameter.
• Another use of const is to prevent a function
from changing the object on which the
function is invoked. Example from clockType:

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 39


Two Uses of const: Example

This is an error because of this const.

This is an error because of this const.


Arrays of Class Objects

C++ Programming: From Problem Analysis to Program Design, Seventh Edition 41

You might also like