The Shed is going Social! Join us on FaceBook and Twitter and chime in on the conversation.
|
 |
|
Dev Shed Forums
> Programming Languages
> C Programming
|
C++ Class (composition and inheritance)
Discuss C++ Class (composition and inheritance) in the C Programming forum on Dev Shed. C++ Class (composition and inheritance) C programming forum discussing all C derivatives, including C#, C++, Object-C, and even plain old vanilla C. These languages are low level languages, and used on projects such as device drivers, compilers, and even whole computer operating systems.
|
|
 |
|
|
|
|

Dev Shed Forums Sponsor:
|
|
|

December 25th, 2012, 03:32 PM
|
|
Registered User
|
|
Join Date: Dec 2012
Posts: 8
Time spent in forums: 1 h 50 m 18 sec
Reputation Power: 0
|
|
C++ Class (composition and inheritance)
I have written 4 header files (of classes) of which 3 classes has been successfully compiled (Customer, GoldCustomer and PlatinumCustomer). GoldCustomer and PlatinumCustomer are derivation (inheritance) of Customer while the problematic MovieTicket class is a composition of all of the other 3 classes. This is to follow the requirement imposed : to show inheritance and composition.
Compiling MovieTicket gives me these errors. Can anyone help to examine and explain? It seems like there are repetition of declaration of the classes (but from what I read in Google, as long as you put include the classes in the header files and put the header guard, that error wouldnt come out). One other thing is, my array of classes gives errors...I have no idea why
Code:
In file included from class_GoldCustomer.hpp:3:0, from class_MovieTicket.hpp:5:
class_Customer.hpp:11:7: error: redefinition of ‘class Customer’
In file included from class_MovieTicket.hpp:4:0: class_Customer.hpp:11:7: error: previous definition of ‘class Customer’
In file included from class_PlatinumCustomer.hpp:3:0, from class_MovieTicket.hpp:6:
class_Customer.hpp:11:7: error: redefinition of ‘class Customer’
In file included from class_MovieTicket.hpp:4:0: class_Customer.hpp:11:7: error: previous definition of ‘class Customer’
class_MovieTicket.hpp:29:22: error: expected ‘]’ before ‘;’ token
class_MovieTicket.hpp:29:25: error: expected unqualified-id before ‘]’ token
class_MovieTicket.hpp:32:26: error: expected ‘]’ before ‘;’ token
class_MovieTicket.hpp:32:29: error: expected unqualified-id before ‘]’ token
class_MovieTicket.hpp: In member function ‘void MovieTicket::newMovie(int, std::string, std::string, int, int, float)’:
class_MovieTicket.hpp:53:3: error: ‘ListGold’ was not declared in this scope
class_MovieTicket.hpp:53:12: error: expected ‘]’ before ‘;’ token
class_MovieTicket.hpp:53:15: error: expected primary-expression before ‘]’ token
class_MovieTicket.hpp:53:15: error: expected ‘;’ before ‘]’ token
class_MovieTicket.hpp:54:3: error: ‘ListPlat’ was not declared in this scope
class_MovieTicket.hpp:54:12: error: expected ‘]’ before ‘;’ token
class_MovieTicket.hpp:54:15: error: expected primary-expression before ‘]’ token
class_MovieTicket.hpp:54:15: error: expected ‘;’ before ‘]’ token
class_MovieTicket.hpp: In member function ‘void MovieTicket::Purchase()’:
class_MovieTicket.hpp:103:4: error: ‘ListGold’ was not declared in this scope
class_MovieTicket.hpp:108:4: error: ‘ListPlat’ was not declared in this scope
Compilation failed.
Below are the codes:
class_Customer.hpp
Code:
#include <iostream>
#include <string>
//header guard
#ifndef CUSTOMER_H
#define CUSTOMER_H
using namespace std;
class Customer {
protected:
//data members
int id;
string type;
int sold;
//public:
//constructor and destructor
Customer(){
type = "non member"; //default this customer class as 'non member'
sold = 0;
}
~Customer(){}
//functions member
void setID(int inputID){ //set ID of the customer
id = inputID;
}
int getSold(){ //get no. of sold
return sold;
}
};
#endif
class_GoldCustomer.hpp
Code:
#include <iostream>
#include <string>
#include "class_Customer.hpp"
using namespace std;
//header guard
#ifndef GOLDCUSTOMER_H
#define GOLDCUSTOMER_H
class GoldMember : protected Customer{
private:
//data members
int gold_id;
int annual_fee;
float discount;
public:
//constructor and destructor
GoldMember(){
type = "gold";
sold = 0;
annual_fee = 10;
discount = 0.1;
}
~GoldMember(){}
//functions member
int getAnnualFee(){ //get annual fee
return annual_fee;
}
float getDiscount(){ //get discount
return discount;
}
};
#endif
class_PlatinumCustomer.hpp
Code:
#include <iostream>
#include <string>
#include "class_Customer.hpp"
#define POINT 5; //how many ticket purchased needed to eligible for one free ticket
using namespace std;
//header guard
#ifndef PLATINUMCUSTOMER_H
#define PLATINUMCUSTOMER_H
class PlatinumMember : protected Customer{
private:
//data members
int plat_id;
int annual_fee;
float discount;
int redeem_point = 0; //count the tickets purchased as 'points'
public:
//constructor and destructor
PlatinumMember(){
type = "gold";
sold = 0;
annual_fee = 50;
discount = 0.2;
redeem_point = 0;
}
~PlatinumMember(){}
//functions member
int getAnnualFee(){ //get annual fee
return annual_fee;
}
float getDiscount(){ //get discount
return discount;
}
int getFRedeemPoint(){ //get redeem point
return redeem_point;
}
int getFreeTicket(){ //get no. of free tickets based on redeem point
int result;
result = redeem_point/POINT;
return result;
}
};
#endif
Finally, failed to compile:
class_MovieTicket.hpp
Code:
#include <iostream>
#include <string>
#include "class_Customer.hpp"
#include "class_GoldCustomer.hpp"
#include "class_PlatinumCustomer.hpp"
//header guard
#ifndef MOVIETICKET_H
#define MOVIETICKET_H
using namespace std;
#define MAX 20; //no of tickets per movie hall available
class MovieTicket {
private:
int movie_id;
string movie_title;
string date;
int hall_no;
int seat_no;
float ori_price;
int NonMemberCount;
GoldMember ListGold[MAX];
int GoldMemberCount;
PlatinumMember ListPlat[MAX];
int PlatMemberCount;
static int AvailTicket;
static int SoldTicket;
public:
//constructor and destructor
MovieTicket(){};
~MovieTicket(){};
//functions member
void newMovie(int inputMovieID, string inputTitle, string inputDate, int inputHall, int inputSeat, float inputPrice){
movie_id = inputMovieID;
movie_title = inputTitle;
date = inputDate;
hall_no = inputHall;
seat_no = inputSeat;
ori_price = inputPrice;
ListGold[MAX] = {0};
ListPlat[MAX] = {0};
AvailTicket = MAX;
SoldTicket = 0;
}
int getAvailTicket(){
return AvailTicket;
}
int getSoldTicket(){
return SoldTicket;
}
void Purchase(){
int no_of_ticket;
int membership;
int Inputgold_id;
int Inputplat_id;
cout <<"Enter Movie ID?" << endl;
cin >> movie_id;
cout << endl << "How many ticket?" << endl;
cin >> no_of_ticket;
cout << endl << "Enter membership? 1. Non 2. Gold 3.Plat" << endl;
cin >> membership;
this->SoldTicket += no_of_ticket;
this->AvailTicket = MAX - this->SoldTicket;
if (membership == 2){
cout << "Enter your Gold Membership ID?" << endl;
cin >> Inputgold_id;
GoldMember Inputgold_id; //create a Gold customer class with 'ID' as the name
}
else if (membership == 3){
cout << "Enter your Platinum Membership ID?" << endl;
cin >> Inputplat_id;
PlatinumMember Inputplat_id; //create a Plat customer class with 'ID' as the name
}
switch (membership){
case 1:
NonMemberCount++;
break;
case 2:
GoldMemberCount++;
ListGold[GoldMemberCount] = Inputgold_id;
break;
case 3:
PlatMemberCount++;
ListPlat[PlatMemberCount] = Inputplat_id;
break;
}
}
};
#endif
p/s: sorry for the long post.

|

December 25th, 2012, 03:43 PM
|
 |
Contributed User
|
|
|
|
|
A couple of points.
1. #define MAX 20; //no of tickets per movie hall available
#defines do not normally have ; in them.
Otherwise, your array expands to
GoldMember ListGold[20;];
Besides, this is C++, so you can do
const int MAX = 20;
Secondly, do NOT put
using namespace std;
in your header files.
If someone using your header files doesn't want the std namespace, and you go and use it anyway, then there is no way back for your library user.
|

December 25th, 2012, 04:04 PM
|
|
Registered User
|
|
Join Date: Dec 2012
Posts: 8
Time spent in forums: 1 h 50 m 18 sec
Reputation Power: 0
|
|
Quote: | Originally Posted by salem A couple of points.
1. #define MAX 20; //no of tickets per movie hall available
#defines do not normally have ; in them.
Otherwise, your array expands to
GoldMember ListGold[20;];
Besides, this is C++, so you can do
const int MAX = 20;
Secondly, do NOT put
using namespace std;
in your header files.
If someone using your header files doesn't want the std namespace, and you go and use it anyway, then there is no way back for your library user. |
1. Ahh You were right. I miss-put that ";". Thanks.
2. I removed "using namespace std" from all header files except the class_Customer.h since it produces errors when it is compiled. Somehow, it doesnt recognized <string> header files without it.
Code:
class_Customer.hpp:15:2: error: ‘string’ does not name a type
class_Customer.hpp: In constructor ‘Customer::Customer()’:
class_Customer.hpp:21:3: error: ‘type’ was not declared in this scope
Compilation failed.
3. However, the main issue of "repetition of declaration of the classes " is still unknown..I'm still reading and tweaking around though to no avail
|

December 25th, 2012, 05:04 PM
|
 |
Contributing User
|
|
|
|
|
I'm quite sure you need
std::string
where you have string. I don't mind typing some to resolve namespace. You can write in m4 if this is too wordy for you.
__________________
[code] Code tags[/code] are essential for python code!
|

December 25th, 2012, 05:48 PM
|
|
Registered User
|
|
Join Date: Dec 2012
Posts: 8
Time spent in forums: 1 h 50 m 18 sec
Reputation Power: 0
|
|
Quote: | Originally Posted by b49P23TIvg I'm quite sure you need
std::string
where you have string. I don't mind typing some to resolve namespace. You can write in m4 if this is too wordy for you. |
You are right. I take your points, thanks
btw, I have solved the "repetition of declaration of the classes" issues. I should have put the header guard before everything else.
Some errors remain afterwards but I think that will do for now, thanks.
I still could take any more good tips though. Thanks
|
Developer Shed Advertisers and Affiliates
| Thread Tools |
Search this Thread |
|
|
|
| Display Modes |
Rate This Thread |
Linear Mode
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
|
|