Problem Solving with C++ (10th Edition)
Problem Solving with C++ (10th Edition)
10th Edition
ISBN: 9780134448282
Author: Walter Savitch, Kenrick Mock
Publisher: PEARSON
Question
Book Icon
Chapter 16, Problem 1P
Program Plan Intro

  • Include required library files.
  • Define a class named “NegativeAmount” and “InsufficientFunds”.
  • Inside the “Account” class,
    • Add the negative amount exception in the “deposit()” function.
    • Add the negative amount and insufficient funds exception in the “withdraw()” function.
  • Define a “main()” function to test the program to deposit and withdraw amounts.
    • Create an object and test the deposit and withdraw using the appropriate function.
    • Then print the result.

Expert Solution & Answer
Check Mark
Program Description Answer

Program to rewrite the given class “Account” that throws an appropriate exceptions and test the program to deposit and withdraw amounts are as follows,

Explanation of Solution

// Include required library files

#include <iostream>

using namespace std;

// Definition of class NegativeAmount

class NegativeAmount

{

};

// Definition of class insufficientFunds

class InsufficientFunds

{

};

// Definition of class Account

class Account

{

  // Access specifier

  private:

    // Declaration of double variable

    double balance;

  // Access specifier

  public:

    // Definition of default constructor

    Account()

    {

      // Assign 0 to balance

      balance = 0;

    }

    // Definition of constructor to assign value

    Account(double initialDeposit)

    {

      // Assign initialDeposit to balance

      balance = initialDeposit;

    }

  // Definition of getBalance() function to return balance

    double getBalance()

    {

      // Return balance

      return balance;

    }

  // Definition of deposit() function to return new balance

  // or throw NegativeAmount exception

  double deposit(double amount) throw (NegativeAmount)

  {

    // Check amount is greater than 0

    if (amount > 0)

      // Condition is trur, compute balance

      balance += amount;

    // Otherwise

    else

      // Throw exception

      throw NegativeAmount();

    // Return balance

    return balance;

  }

  // Definition of withdraw function to return new balance

  // or throw NegativeAmount or InsufficientFunds

  double withdraw(double amount) throw (NegativeAmount,

  InsufficientFunds)

  {

    // Check amount is greater than balance

    if (amount > balance)

      // Throw insufficient exception

      throw InsufficientFunds();

    // Otherwise check amount is lesser than 0

    else if (amount < 0)

      // Throw negative amount execption

      throw NegativeAmount();

    // Otherwise

    else

      // Compute balance

      balance -= amount;

    // Return balance

    return balance;

  }

};

// Definition of main() function

int main()

{

  // Creation of object and passing 100 to the constructor

  Account a(100);

  // Try block

  try

  {

    // Call deposit() function to deposit 50

    a.deposit(50);

    // Call deposit() function to deposit 10

    a.deposit(10);

    // Call withdraw() function to deposit 220

    a.withdraw(220);

  // Call getBalance() function to get print balance amount

    cout << a.getBalance() << endl;

  }

  // Catch block for negative amount

  catch (NegativeAmount)

  {

    // Print the message regarding negative amount

      cout << "You can't deposit or withdraw a negative amount."

    << endl;

  }

  // Catch block for insufficient funds

  catch (InsufficientFunds)

  {

    // Print the message for insufficient funds

    cout << "Insufficient funds for withdrawal." << endl;

  }

  // Declaration of character variable

  char ch;

  // Get an character

  cin >> ch;

  // Return 0

  return 0;

}

Sample Output

Output:

Insufficient funds for withdrawal.

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
The next problem concerns the following C code: /copy input string x to buf */ void foo (char *x) { char buf [8]; strcpy((char *) buf, x); } void callfoo() { } foo("ZYXWVUTSRQPONMLKJIHGFEDCBA"); Here is the corresponding machine code on a Linux/x86 machine: 0000000000400530 : 400530: 48 83 ec 18 sub $0x18,%rsp 400534: 48 89 fe mov %rdi, %rsi 400537: 48 89 e7 mov %rsp,%rdi 40053a: e8 d1 fe ff ff 40053f: 48 83 c4 18 add callq 400410 $0x18,%rsp 400543: c3 retq 0000000000400544 : 400544: 48 83 ec 08 sub $0x8,%rsp 400548: bf 00 06 40 00 mov $0x400600,%edi 40054d: e8 de ff ff ff callq 400530 400552: 48 83 c4 08 add $0x8,%rsp 400556: c3 This problem tests your understanding of the program stack. Here are some notes to help you work the problem: • strcpy(char *dst, char *src) copies the string at address src (including the terminating '\0' character) to address dst. It does not check the size of the destination buffer. You will need to know the hex values of the following characters:
A ROP (Return-Oriented Programming) attack can be used to execute arbitrary instructions by chaining together small pieces of code called "gadgets." Your goal is to create a stack layout for a ROP attack that calls a function located at '0x4018bd3'. Below is the assembly code for the function 'getbuf', which allocates 8 bytes of stack space for a 'char' array. This array is then passed to the 'gets' function. Additionally, you are provided with five useful gadgets and their addresses. Use these gadgets to construct the stack layout. Assembly for getbuf 1 getbuf: 2 sub $8, %rsp 3 mov %rsp, %rdi 4 call gets 56 add $8, %rsp ret #Allocate 8 bytes for buffer #Load buffer address into %rdi #Call gets with buffer #Restore the stack pointer #Return to caller. Stack Layout (fill in Gadgets each 8-byte section) Address Gadget Address Value (8 bytes) 0x4006a7 pop %rdi; ret 0x7fffffffdfc0 Ox4006a9 pop %rsi; ret 0x7fffffffdfb8 0x4006ab pop %rax; ret 0x7fffffffdfb0 0x7fffffffdfa8 Ox4006ad mov %rax,…
In each of the following C code snippets, there are issues that can prevent the compilerfrom applying certain optimizations. For each snippet:• Circle the line number that contains compiler optimization blocker.• Select the best modification to improve optimization.1. Which line prevents compiler optimization? Circle one: 2 3 4 5 6Suggested solution:• Remove printf or move it outside the loop.• Remove the loop.• Replace arr[i] with a constant value.1 int sum( int ∗ ar r , int n) {2 int s = 0 ;3 for ( int i = 0 ; i < n ; i++) {4 s += a r r [ i ] ;5 p r i n t f ( ”%d\n” , s ) ;6 }7 return s ;8 }2. Which line prevents compiler optimization? Circle one: 2 3 4 5 6Suggested solution:• Move or eliminate do extra work() if it’s not necessary inside the loop.• Remove the loop (but what about scaling?).• Replace arr[i] *= factor; with arr[i] = 0; (why would that help?).1 void s c a l e ( int ∗ ar r , int n , int f a c t o r ) {2 for ( int i = 0 ; i < n ; i++) {3 a r r [ i ] ∗= f a c t o r…
Knowledge Booster
Background pattern image
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
Programming Logic & Design Comprehensive
Computer Science
ISBN:9781337669405
Author:FARRELL
Publisher:Cengage
Text book image
C++ for Engineers and Scientists
Computer Science
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Course Technology Ptr
Text book image
EBK JAVA PROGRAMMING
Computer Science
ISBN:9781337671385
Author:FARRELL
Publisher:CENGAGE LEARNING - CONSIGNMENT
Text book image
Microsoft Visual C#
Computer Science
ISBN:9781337102100
Author:Joyce, Farrell.
Publisher:Cengage Learning,
Text book image
C++ Programming: From Problem Analysis to Program...
Computer Science
ISBN:9781337102087
Author:D. S. Malik
Publisher:Cengage Learning
Text book image
Programming with Microsoft Visual Basic 2017
Computer Science
ISBN:9781337102124
Author:Diane Zak
Publisher:Cengage Learning