Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- using namespace std;
- class IceCream{
- private:
- char *name;
- char ingredients[100];
- float price;
- int discount;
- public:
- IceCream(){
- name=new char[0];
- strcpy(ingredients,"");
- price=0;
- discount=0;
- }
- IceCream(char *name1,char *ingredients1,float price1){
- name=new char[strlen(name1)+1];
- strcpy(name,name1);
- strcpy(ingredients,ingredients1);
- price=price1;
- discount=0;
- }
- IceCream(char *name1,char *ingredients1,float price1,int discount1){
- name=new char[strlen(name1)+1];
- strcpy(name,name1);
- strcpy(ingredients,ingredients1);
- price=price1;
- discount=discount1;
- }
- IceCream(const IceCream &ic){
- name=new char[strlen(ic.name)+1];
- strcpy(name,ic.name);
- strcpy(ingredients,ic.ingredients);
- price=ic.price;
- discount=ic.discount;
- }
- IceCream operator =(const IceCream &ic){
- if(this!=&ic){
- name=new char[strlen(ic.name)+1];
- strcpy(name,ic.name);
- strcpy(ingredients,ic.ingredients);
- price=ic.price;
- discount=ic.discount;
- }
- return *this;
- }
- ~IceCream(){
- delete [] name;
- }
- float discountPrice(){
- return price-price*discount/100.0;
- }
- friend ostream& operator <<(ostream &out, IceCream &ic){
- if(ic.discount!=0){
- out<<ic.name<<": "<<ic.ingredients<<" "<<ic.price<<" ("<<ic.discountPrice()<<")";
- }else{
- out<<ic.name<<": "<<ic.ingredients<<" "<<ic.price<<" ";
- }
- return out;
- }
- IceCream operator++(){
- discount+=5;
- return *this;
- }
- IceCream operator+(char *plusIme){
- char novoIme[strlen(name)+strlen(plusIme)+3];
- strncpy(novoIme,name,strlen(name));
- novoIme[strlen(name)]=' ';
- novoIme[strlen(name)+1]='+';
- novoIme[strlen(name)+2]=' ';
- int brojac=0;
- for(int i=strlen(name)+3;i<(strlen(name)+strlen(plusIme))+3;i++){
- novoIme[i]=plusIme[brojac++];
- }
- novoIme[strlen(novoIme)-2]='\0';
- IceCream novSladoled(novoIme,ingredients,price+10,discount);
- return novSladoled;
- }
- void setDiscount(int discount1){
- if(discount1<0 || discount1>100) throw discount1;
- discount=discount1;
- }
- void setName(char *name1){
- name=new char[strlen(name1)+1];
- strcpy(name,name1);
- }
- };
- class IceCreamShop {
- private:
- char name[50];
- IceCream *iceCreams;
- int brojac;
- public:
- IceCreamShop(){
- strcpy(name,"");
- iceCreams=new IceCream[0];
- brojac=0;
- }
- IceCreamShop(char *name1,IceCream *ic1,int brojac1){
- iceCreams=new IceCream[brojac1];
- brojac=brojac1;
- for(int i=0;i<brojac1;i++){
- iceCreams[i]=ic1[i];
- }
- strcpy(name,name1);
- }
- IceCreamShop(char *name1){
- iceCreams=new IceCream[0];
- brojac=0;
- strcpy(name,name1);
- }
- IceCreamShop(IceCreamShop &ics){
- iceCreams=new IceCream[ics.brojac];
- brojac=ics.brojac;
- for(int i=0;i<ics.brojac;i++){
- iceCreams[i]=ics.iceCreams[i];
- }
- strcpy(name,ics.name);
- }
- IceCreamShop operator =(IceCreamShop &ics){
- if(this!=&ics){
- iceCreams=new IceCream[ics.brojac];
- brojac=ics.brojac;
- for(int i=0;i<ics.brojac;i++){
- iceCreams[i]=ics.iceCreams[i];
- }
- strcpy(name,ics.name);
- }
- return *this;
- }
- ~IceCreamShop(){
- delete [] iceCreams;
- }
- IceCreamShop operator +=(IceCream ic){
- IceCream *tmp=new IceCream[brojac];
- for(int i=0;i<brojac;i++){
- tmp[i]=iceCreams[i];
- }
- delete [] iceCreams;
- iceCreams=new IceCream[brojac+1];
- for(int i=0;i<brojac;i++){
- iceCreams[i]=tmp[i];
- }
- iceCreams[brojac]=ic;
- delete [] tmp;
- brojac++;
- return *this;
- }
- friend ostream& operator<<(ostream &out, IceCreamShop &ics){
- out<<ics.name<<endl;
- for(int i=0;i<ics.brojac;i++){
- out<<ics.iceCreams[i]<<endl;
- }
- return out;
- }
- };
- // your code here
- // DO NOT CHANGE THE MAIN FUNCTION, EXCEPT THE MARKED PART FOR HANDLING WITH THE EXCEPTION
- int main() {
- char name[100];
- char ingr[100];
- float price;
- int discount;
- int testCase;
- cin >> testCase;
- cin.get();
- if(testCase == 1) {
- cout << "====== TESTING IceCream CLASS ======" << endl;
- cin.getline(name,100);
- cin.getline(ingr,100);
- cin >> price;
- cin >> discount;
- cout << "CONSTRUCTOR" << endl;
- IceCream ic1(name, ingr, price);
- ic1.setDiscount(discount);
- cin.get();
- cin.getline(name,100);
- cin.getline(ingr,100);
- cin >> price;
- cin >> discount;
- IceCream ic2(name, ingr, price);
- ic2.setDiscount(discount);
- cout << "OPERATOR <<" << endl;
- cout << ic1 << endl;
- cout << ic2 << endl;
- cout << "OPERATOR ++" << endl;
- ++ic1;
- cout << ic1 << endl;
- cout << "OPERATOR +" << endl;
- IceCream ic3 = ic2 + "chocolate";
- cout << ic3 << endl;
- } else if(testCase == 2) {
- cout << "====== TESTING IceCream CONSTRUCTORS ======" << endl;
- cin.getline(name,100);
- cin.getline(ingr,100);
- cin >> price;
- cout << "CONSTRUCTOR" << endl;
- IceCream ic1(name, ingr, price);
- cout << ic1 << endl;
- cout << "COPY CONSTRUCTOR" << endl;
- IceCream ic2(ic1);
- cin.get();
- cin.getline(name,100);
- ic2.setName(name);
- cout << ic1 << endl;
- cout << ic2 << endl;
- cout << "OPERATOR =" << endl;
- ic1 = ic2;
- cin.getline(name,100);
- ic2.setName(name);
- cout << ic1 << endl;
- cout << ic2 << endl;
- cout << "TESTING EXCEPTION" << endl;
- // your exception handling code
- try{
- cin >> discount;
- ic1.setDiscount(discount);
- }catch (int brojce){
- cout<<"Invalid discount value: "<<brojce<<endl;
- }
- } else if(testCase == 3) {
- cout << "====== TESTING IceCreamShop ======" << endl;
- char icsName[50];
- cin.getline(icsName,100);
- cout << "CONSTRUCTOR" << endl;
- IceCreamShop ics(icsName);
- int n;
- cin >> n;
- cout << "OPERATOR +=" << endl;
- for(int i = 0; i < n; ++i) {
- cin.get();
- cin.getline(name,100);
- cin.getline(ingr,100);
- cin >> price;
- IceCream ic(name, ingr, price);
- ics += ic;
- }
- cout << ics;
- } else if(testCase == 4) {
- cout << "====== TESTING IceCreamShop CONSTRUCTORS ======" << endl;
- char icsName[50];
- cin.getline(icsName,100);
- IceCreamShop ics(icsName);
- int n;
- cin >> n;
- for(int i = 0; i < n; ++i) {
- cin.get();
- cin.getline(name,100);
- cin.getline(ingr,100);
- cin >> price;
- IceCream ic(name, ingr, price);
- ics += ic;
- }
- IceCream x("FINKI fruits", "strawberry ice cream, raspberry ice cream, blueberry ice cream", 60);
- IceCreamShop icp = ics;
- ics+=x;
- cout << ics << endl;
- cout << icp << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement