COS 1512
ASSIGNMENT 3
SOLUTIONS
StudyWellNotes
8-16-2022
, COS1512_ASSIGNMENT3_2022
Contents
Question 1............................................................................................................................................................. 2
Program Code ................................................................................................................................................... 3
Question 2............................................................................................................................................................. 6
Question 3............................................................................................................................................................. 8
Question 4........................................................................................................................................................... 11
Question 5........................................................................................................................................................... 14
PROGRAM CODE ............................................................................................................................................. 17
Question 6 a ........................................................................................................................................................ 20
Question 6b......................................................................................................................................................... 23
Question 7........................................................................................................................................................... 26
Program Code ................................................................................................................................................. 26
Question 8........................................................................................................................................................... 30
About This Document
1. All questions come with code
a. Please scroll to the last page of this document, to get the download link
2. Question 8, required you to do the question yourself, don’t forget about it.
3. If you are having any issues, kindly email studywellnotes@gmail.com
P a g e 1 | 30
, COS1512_ASSIGNMENT3_2022
Question 1
Discussion:
For this question, you had to convert the struct Address into a class. There is essentially only a slight
difference between a struct and a class. A class is the same as a struct (i.e. a struct may also
contain both member variables and member functions just like a class, even though the examples
in Savitch do not show that) except that, by default, all members are inaccessible to the general user of
the class. This means that all members of a struct are by default public, and all members of a class
are by default private. Therefore, we have to specify that the member functions are public.
(As an exercise, omit the public keyword from the class and recompile it.) While there are situations
where a struct is more suitable, as a rule, you should use classes rather than structs. In
general, it is preferable to use classes, as classes offer better protection.
An object encapsulates or combines data and operations on that data into a single unit. In C++,
the mechanism that allows you to combine data and the operations on that data in a single unit is
called a class.
A class can be seen as a user-defined data type. We use a class to declare or instantiate an object.
When an object of a specific class is instantiated, the constructor for the class is called by default. The
purpose of the constructor is to initialise the member variables of the object automatically. This means that
a constructor should not include instructions to obtain values for the member variables (cin statements).
It also means that the member variables should not be re-declared inside the constructor, since
these variables will then be local to the function, and will prevent the constructor function from
accessing the member variables to initialise them. Study the constructor for class Address as shown
below to see how these concepts are implemented:
//implementation
Address::Address()
//constructor
{
streetName = "
"; streetNr =
0; city = " ";
postalCode = "0000";
}
As streetName, streetNr, city, and postalCode are private member variables (see page 549
of Savitch 6th edition/ page 581 of Savitch 7th edition/ page 579 of Savitch 8th edition) of class
Address, they cannot be accessed directly in the main() function. As a result, public member
functions getStName(), getStNr(), getCity() and getPCode() are used to access these member
variables in order to determine their values. These functions are known as accessor functions, while
setStName(), setStNr(), setCity() and setPCode() are mutator functions. (Study pages 553
– 554 of Savitch, 6th edition/ pages 585 -586 of Savitch 7th edition/ pages 581 - 582 of Savitch 8th
edition).
Note the prototypes for member
functions: string
getStName() const; int
getStNr()const; string
getCity()const; string
getPCode()const;
P a g e 2 | 30
, COS1512_ASSIGNMENT3_2022
These member function are accessors - hence the const keyword at the end of the function
definition. Note that a member function that does not have the const keyword at the end of it may
possibly mutate (change or modify) the state of the object.
Note that the purpose of an accessor function (a function whose name starts with get, and
sometimes called a ‘get function’) is not to obtain an input value for the member variable from a
user, BUT to return the current value of the member variable. Accessor functions need to
indicate a return type corresponding to the member variable for which it returns a value. An
accessor function has no parameters. Since an accessor function is a member function of the class,
it refers directly to the member variable which value it should return in the body of the function, i.e.
there is no need to declare (and return) a local variable inside an accessor function. In fact, if you
do declare a local variable inside an accessor function, and return the value of the local variable, it
will NOT return the current value of the member variable!
Study the accessor function getStName() to see how these concepts are implemented:
//Accessors to retrieve (get) data from each of member variables
string Address::getStName() const
{
return streetName;
}
Mutator functions (functions whose names start with set, and sometimes called ‘set functions’) are used
to change or modify member variables of an object. The parameter of the mutator function typically
indicates the value according to which the member variable should be changed. For example, the
mutator function setStName()below modifies member variable streetName to s:
void Address::setStName(string s)
{
streetName = s;
}
Program Code
#include <iostream>
#include <string>
using namespace std;
class Address {
public:
Address();
void setStreetName(string s);
void setStreetNumber(int n);
void setCity(string c);
void setPostalCode(string p);
string getStreetName()const;
int getStreetNumber()const;
string getCity()const;
string getPostalCode()const;
private:
string streetName;
int streetNr;
string city;
string postalCode;
};
P a g e 3 | 30
, COS1512_ASSIGNMENT3_2022
//implementation
Address::Address() { //constructor
streetName = " ";
streetNr = 0;
city = " ";
postalCode = "0000";
}
//Mutators to change (set) the value of each member variable
void Address::setStreetName(string s) {
streetName = s;
}
void Address::setStreetNumber(int n) {
streetNr = n;
}
void Address::setCity(string c) {
city = c;
}
void Address::setPostalCode(string p) {
postalCode = p;
}
//Accessors to retrieve (get) data from each of member variables
string Address::getStreetName() const {
return streetName;
}
int Address::getStreetNumber() const {
return streetNr;
}
string Address::getCity() const {
return city;
}
string Address::getPostalCode() const {
return postalCode;
}
//main application
int main() {
Address myAddress;
string sName;
int sNr;
string cCity;
string PostalCode;
cout << "Please enter your address:" << endl;
cout << "Street name: ";
getline(cin, sName, '\n');
myAddress.setStreetName(sName);
cout << "Street number: ";
cin >> sNr;
myAddress.setStreetNumber(sNr);
cout << "City: ";
cin >> cCity;
myAddress.setCity(cCity);
cout << "Postal code: ";
cin >> PostalCode;
myAddress.setPostalCode(PostalCode);
cout << endl << "My address is: " << endl;
cout << myAddress.getStreetNumber() << " " << myAddress.getStreetName() <<
P a g e 4 | 30
, COS1512_ASSIGNMENT3_2022
endl;
cout << myAddress.getCity() << endl;
cout << myAddress.getPostalCode() << endl;
return 0;
}
/*
Please enter your address:
Street name: Preller St
Street number: 543
City: Muckleneuk
Postal code: 0002
My address is:
543 Preller St
Muckleneuk
0002
--------------------------------
Press any key to continue . . .*/
P a g e 5 | 30
, COS1512_ASSIGNMENT3_2022
Question 2
#include <iostream>
using namespace std;
class ShowTicket {
private:
int iRow,iSeatNumber;
bool bSold;
public:
ShowTicket();
ShowTicket(int row, int seat, bool sold);
bool getSold() const;
void setSold(bool sold);
void print() const;
~ShowTicket();
};
// default constructor
ShowTicket::ShowTicket(){
iRow = 0;
iSeatNumber = 0;
bSold = false;
}
// overloaded constructor
ShowTicket::ShowTicket(int row, int seat, bool sold) {
iRow = row;
iSeatNumber = seat;
bSold = sold;
}
// method to print
void ShowTicket::print() const{
cout << "Row:" << iRow << endl;
cout << "Seat Number: " << iSeatNumber << endl;
if (bSold == true) {
cout << "Sold Status: " << "Ticket Sold" << endl;
} else {
cout << "Sold Status: " << "Ticket Not Sold" << endl;
}
cout << endl;
}
// method to check if ticket is sold
bool ShowTicket::getSold() const {
return bSold;
}
P a g e 6 | 30