## Description

You will practice creating a class that has

operator overloading and friend functions,

and that uses separate compilation.

For a refresher on Roman numerals, see

https://en.wikipedia.org/wiki/Roman_numerals

Read up to but not including the section

“Alternate forms”.

Class RomanNumeral

Design and implement a C++ class RomanNumeral that reads, writes, and performs

arithmetic operations on Roman numerals. This class must have:

• Private member variables string roman and int decimal that store the

Roman numeral string (such as “MCMLXVIII”) and the corresponding decimal

value (such as 1968) of each RomanNumeral object.

• Private member functions to_roman and to_decimal that convert between the

string and decimal values of a RomanNumeral object and thereby set the values

of member variables roman and decimal.

• Public constructors, one that takes an integer parameter and another that takes a

string parameter. Each constructor must ensure that a RomanNumeral object’s

roman and decimal members are correct.

• Public getter functions that return a RomanNumeral object’s string and decimal

values.

• Overloaded arithmetic operators + – * and / that enable direct arithmetic

operations with Roman numerals. Each operator must return a RomanNumeral

object and the operation must not change the value of either operand. Roman

numerals do integer division (drop the fraction part of a quotient).

• Overloaded equality operators == and != that enable direct comparisons of

RomanNumeral objects.

2

• Overloaded I/O stream operators >> and << o Input a Roman numeral value as a string, such as MCMLXVIII o Output a Roman numeral value in the form [decimal:string] such as [1968:MCMLXVIII] You may assume for this assignment that the values of the Roman numerals range from 1 through 3999. (Did the ancient Romans have a zero or negative numbers?) Tip: Do the operations using normal integer arithmetic on the decimal values and then convert to Roman strings. Separate compilation In CodeCheck, you will complete header file RomanNumeral.h and implementation file RomanNumeral.cpp. Reference and const Use reference parameters to minimize argument copying. Use const parameters and const member functions to maximize compile-time checking. Test the class Source file RomanNumeralTests.cpp contains two test functions. Function test1 performs arithmetic and equality tests on RomanNumeral objects. Function test2 inputs the text file RomanNumeral.txt: http://www.cs.sjsu.edu/~mak/CS144/assignments/5/RomanNumeral.txt The file contains simple two-operand arithmetic expressions with Roman numerals. The operator is either + – * or / and is surrounded on each side by one or more blanks. The function should read each expression, perform the operation, and print the expression and its result: You may assume that all the Roman numerals in the input are in upper case, and that there are no input errors. Therefore, for this assignment, you do not need to do input error checking. [1963:MCMLXIII] + [56:LVI] = [2019:MMXIX] [2001:MMI] – [33:XXXIII] = [1968:MCMLXVIII] [53:LIII] * [33:XXXIII] = [1749:MDCCXLIX] [2001:MMI] / [33:XXXIII] = [60:LX] MCMLXIII + LVI MMI – XXXIII LIII * XXXIII MMI / XXXIII 3 Submission into Canvas You can submit as many times as necessary to get satisfactory results, and the number of submissions will not affect your score. When you’re done with your program, click the “Download” link at the very bottom of the Report screen to download the signed zip file of your solution. Submit the signed zip file into Canvas: Assignment #5. Roman Numerals. Rubric Criteria Max points Correct program output (as determined by CodeCheck) • Correct output from Test1: o r1, r2, r3, and r4 o r1 + r2/r3 o r1 == r3 o r1 != r4 o r2 == r4 o r3 != r4 • Correct output from Test2: o + expression o – expression o * expression o / expression 60 • Test1 o 10 o 10 o 5 o 5 o 5 o 5 • Test2 o 5 o 5 o 5 o 5 Good class design • Constructor with string parameter. • Constructor with integer parameter. • Use of reference parameters and const. • Private member function to_roman. • Private member function to_decimal. • Overloaded + operator. • Overloaded – operator. • Overloaded * operator. • Overloaded / operator. • Overloaded == operator. • Overloaded != operator. • Overloaded >> operator.

• Overloaded << operator.

90

• 5

• 5

• 10

• 10

• 10

• 5

• 5

• 5

• 5

• 5

• 5

• 10

• 10

Good program style

• Function declarations with comments

before the main.

• Good names and internal comments.

10

• 5

• 5

4

It is possible …

… to perform arithmetic directly on Roman numeral strings:

http://turner.faculty.swau.edu/mathematics/materialslibrary/roman/

Doing it on the decimal values is much easier!

Academic integrity

You may study together and discuss the assignments, but what you turn in must be

your individual work. Assignment submissions will be checked for plagiarism using

Moss (http://theory.stanford.edu/~aiken/moss/). Copying another student’s

program or sharing your program is a violation of academic integrity. Moss is

not fooled by renaming variables, reformatting source code, or re-ordering functions.

Violators of academic integrity will suffer severe sanctions, including academic

probation. Students who are on academic probation are not eligible for work as

instructional assistants in the university or for internships at local companies.