Question

In: Computer Science

Programming Exercise Implement the following class design: class Tune { private:    string title; public:   ...

Programming Exercise

Implement the following class design:

class Tune

{

private:

   string title;

public:

   Tune();

   Tune( const string &n );  

   const string & get_title() const;

};

class Music_collection

{

private:

int number; // the number of tunes actually in the collection

int max; // the number of tunes the collection will ever be able to hold

Tune *collection; // a dynamic array of Tunes: "Music_collection has-many Tunes"

public:

// default value of max is a conservative 100

Music_collection();     

// sets max to n

Music_collection( int n );

// overloaded copy constructor

Music_collection( const Music_collection &m);

// returns true if add was successful,

// returns false if not enough room to add

bool add_tune( const Tune &t );

// sets the Tune at position index in collection to t,

// returns true if index < number   

bool set_tune( int index, const Tune &t );

// overloaded assignment operator

Music_collection & operator=( const Music_collection &m );

// Destructor

~Music_collection();

// overloaded stream insertion operator

// outputs the title of each Tune in the collection on a separate line

friend ostream & operator<<( ostream &out, const Music_collection &m );

};

Testing

Now let’s give your code a test run.

You should build a test harness that uses the following pseudo-code:

main()

{

//create a few Tune objects to use later on;

Music_collection A;

//add a few tunes to A;

Music_collection B(A);

//change a Tune in B using set_tune function;

Music_collection C;

C = B;

//add a Tune to B;

//change a Tune in C using set_tune function;

//print A,B,C;

}

After you test your work, comment out the assignment operator and copy constructor in .h and .cpp files of your Music_collection class implementation. re-compile and run your code. Compare the results with the previous run. (Ignore seg. fault and memory corruption errors, on terminal just check the lines right after you call your binary executable, i.e a.out)

Pay careful attention to the "boundary" or special cases: e.g. what happens if you try to assign an object to itself? (When could this happen?)

Remember to free the memory of the left-hand-side object of the assignment operator.

Remember to make deep copies, not shallow copies. (Make sure you can explain exactly what this means!)

What to submit

submit the following files (case sensitive):

  • music_collection.h (this file also contains Tune class)

  • music_collection.cpp

  • main.cpp

Programming language: C++

Requirement: Please tightly follow up the requirement as demonstrated above.

1. comment out the assignment operator and copy constructor in .h and .cpp files of your Music_collection class implementation. Re-complie and run your code

2. complete Music_collection.cpp file

3. provide illustration/comments with output result

Solutions

Expert Solution

#include<bits/stdc++.h>
using namespace std;

class Tune {
private:
        string title;
public:
        Tune();
        Tune( const string &n ) {
                title = n;
        }
        const string & get_title() const {
                return title;
        }
};

class Music_collection {
private:

        int number; // the number of tunes actually in the collection

        int max; // the number of tunes the collection will ever be able to hold

        Tune *collection; // a dynamic array of Tunes: "Music_collection has-many Tunes"

public:

// default value of max is a conservative 100
        Music_collection() {
                number = 0;
                max = 100;
                collection = (Tune*)malloc(max * (sizeof(Tune)));
        }

// sets max to n

        Music_collection( int n ) {
                number = 0;
                max = n;
                collection = (Tune*)malloc(max * (sizeof(Tune)));
        }

// overloaded copy constructor

        Music_collection( const Music_collection &m) {
                max = m.max;
                number = m.number;
                collection = (Tune*)malloc(max * (sizeof(Tune)));
                for (int i = 0; i < number; ++i) {
                        collection[i] = m.collection[i];
                }
        }

// returns true if add was successful,

// returns false if not enough room to add

        bool add_tune( const Tune &t ) {
                if (number == max) {
                        return false;
                }
                collection[number] = t;
                number++;
        }

// sets the Tune at position index in collection to t,

// returns true if index < number

        bool set_tune( int index, const Tune &t ) {
                if (index < number) {
                        collection[index] = t;
                        return true;
                }
                return false;
        }

// overloaded assignment operator

        Music_collection & operator=( const Music_collection &m ) {
                max = m.max;
                number = m.number;
                collection = (Tune*)malloc(max * (sizeof(Tune)));
                
                for (int i = 0; i < number; ++i) {
                        collection[i] = m.collection[i];
                }
                return *this;
        }

// Destructor

        // ~Music_collection();

// overloaded stream insertion operator

// outputs the title of each Tune in the collection on a separate line

        friend ostream & operator<<( ostream &out, const Music_collection &m );

};


std::ostream& operator<<(std::ostream& out, const Music_collection &m)
{
        for (int i = 0; i < m.number; ++i) {
                cout << m.collection[i].get_title() <<",";
        }
        cout<<endl;
        return out;
}

// Testing

// Now let’s give your code a test run.

// You should build a test harness that uses the following pseudo - code:

main()

{


//create a few Tune objects to use later on;

        Music_collection A;

//add a few tunes to A;
        Tune a("California");
        Tune b("Betles");
        Tune c("Dance");
        Tune d("Flying");

        A.add_tune(a);
        A.add_tune(b);
        A.add_tune(c);
        A.add_tune(d);



        Music_collection B(A);


//change a Tune in B using set_tune function;

        B.set_tune(2,Tune("Kamli"));

        Music_collection C;

        C = B;

//add a Tune to B;

        B.add_tune(Tune("Zamana"));

//change a Tune in C using set_tune function;

        C.set_tune(3,Tune("Loward"));


        cout<<A;
        cout<<B;
        cout<<C;

//print A,B,C;

}

OUTPUT:


Related Solutions

Assume you have created the following data definition class: public class Book {    private String title;...
Assume you have created the following data definition class: public class Book {    private String title;    private double cost;       public String getTitle() { return this.title; }    public double getCost() { return this.cost; }       public void setTitle(String title) {       this.title = title;    } // Mutator to return true/false instead of using exception handling public boolean setCost(double cost) {       if (cost >= 0 && cost < 100) {          this.cost = cost;          return true;       }       else {          return false;       }...
THIS IS JAVA PROGRAMMING Design a class named Account (that contains 1. A private String data...
THIS IS JAVA PROGRAMMING Design a class named Account (that contains 1. A private String data field named id for the account (default 0). 2. A private double data field named balance for the account (default 0). 3. A private double data field named annualInterestRate that stores the current interest rate (default 0). 4. A private Date data field named dateCreated that stores the date when the account was created. 5. A no-arg constructor that creates a default account. 6....
java programing Q: Given the following class: public class Student { private String firstName; private String...
java programing Q: Given the following class: public class Student { private String firstName; private String lastName; private int age; private University university; public Student(String firstName, String lastName, int age, University university) { this.firstName = fisrtName; this.lastName = lastName; this.age = age; this.university = university; } public String getFirstName(){ return firstName; } public String getLastName(){ return lastName; } public int getAge(){ return age; } public University getUniversity(){ return university; } public String toString() { return "\nFirst name:" + firstName +...
public class StringNode { private String item; private StringNode next; } public class StringLL { private...
public class StringNode { private String item; private StringNode next; } public class StringLL { private StringNode head; private int size; public StringLL(){ head = null; size = 0; } public void add(String s){ add(size,s); } public boolean add(int index, String s){ ... } public String remove(int index){ ... } } In the above code add(int index, String s) creates a StringNode and adds it to the linked list at position index, and remove(int index) removes the StringNode at position...
package mac286.LinkedLists; public class Postfix { private rStack<String> S; private String inSt; private ourLinkedList<String> inList, outList;...
package mac286.LinkedLists; public class Postfix { private rStack<String> S; private String inSt; private ourLinkedList<String> inList, outList; public Postfix(String s) { S = new rStack<String>(); inSt = s; outList = new ourLinkedList<String>(); inList = new ourLinkedList<String>(); } public void reset(String s) { S = new rStack<String>(); inSt = s; outList = new ourLinkedList<String>(); inList = new ourLinkedList<String>(); } private boolean isOperator(char c) { if(c=='-'||c=='+'||c=='*'||c=='/') return true; return false; } private boolean isParenthesis(char c) { if(c == '(' || c==')') return true;...
public class Graph { private ST<String, SET<String>> st; public Graph() { st = new ST<String, SET<String>>();...
public class Graph { private ST<String, SET<String>> st; public Graph() { st = new ST<String, SET<String>>(); } public void addEdge(String v, String w) { // Put v in w's SET and w in v's SET. if (!st.contains(v)) st.put(v, new SET<String>()); if (!st.contains(w)) st.put(w, new SET<String>()); st.get(v).add(w); st.get(w).add(v); } public Iterable<String> adjacentTo(String v) { return st.get(v); } public Iterable<String> vertices() { return st.keys(); } // See Exercises 4.5.1-4 for V(), E(), degree(), // hasVertex(), and hasEdge(). public static void main(String[] args)...
package compstore; public class Desktop{ private String brand; private float price; public Desktop(String brand, float price)...
package compstore; public class Desktop{ private String brand; private float price; public Desktop(String brand, float price) { this.brand = brand; this.price = price; } public String getBrand() { return brand; } public float getPrice() { return price; } } package compstore; public class DeskTopDeals{ // assume proper variables and other methods are here public void dealOfTheDay(Desktop[] items, int numItems){ /**************************** * your code would go here * ****************************/ } } Given the above Desktop class, write code that should go...
Suppose we have a Java class called Person.java public class Person { private String name; private...
Suppose we have a Java class called Person.java public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName(){return name;} public int getAge(){return age;} } (a) In the following main method which lines contain reflection calls? import java.lang.reflect.Field; public class TestPerson { public static void main(String args[]) throws Exception { Person person = new Person("Peter", 20); Field field = person.getClass().getDeclaredField("name"); field.setAccessible(true); field.set(person, "Paul"); } }...
Assume you have created the following data definition class: public abstract class Organization { private String...
Assume you have created the following data definition class: public abstract class Organization { private String name;    private int numEmployees;    public static final double TAX_RATE = 0.01;    public String getName() { return this.name; }    public int getNumEmployees() { return this.numEmployees; }         public abstract double calculateTax() {       return this.numEmployees * TAX_RATE;    } } In your own words, briefly (1-2 sentences) explain why the data definition class will not compile. Then, write modified code that...
java code ============ public class BankAccount { private String accountID; private double balance; /** Constructs a...
java code ============ public class BankAccount { private String accountID; private double balance; /** Constructs a bank account with a zero balance @param accountID - ID of the Account */ public BankAccount(String accountID) { balance = 0; this.accountID = accountID; } /** Constructs a bank account with a given balance @param initialBalance the initial balance @param accountID - ID of the Account */ public BankAccount(double initialBalance, String accountID) { this.accountID = accountID; balance = initialBalance; } /** * Returns the...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT