Here's my code so far.
users.h
Code:
#ifndef USERS_H_
#define USERS_H_
#include <string>
typedef unsigned char uchar;
typedef unsigned int uint;
class User{
public:
User( uint id, std::string name );
virtual ~User(){};
const uchar& checkSystemKey() const;
const uchar& checkAccessKey() const;
void setSystemKey( uchar& system );
void setAccessKey( uchar& access );
friend std::ostream& operator<<( std::ostream& os, User& u ){
os << u.userID << " " << u.name << " " << u.systemKey << " " << u.accessKey;
return os;
}
protected:
User( const User& );
User& operator=( const User& );
uint userID;
std::string name;
uchar systemKey;
uchar accessKey;
};
class SysAdmin : public User{
public:
SysAdmin( uint id, std::string name, uchar system );
virtual ~SysAdmin(){};
void addSystemUser( User& user );
void setUserAccess( User& user, uchar& access );
private:
uchar mySystemKey;
};
class SiteAdmin : public SysAdmin{
public:
SiteAdmin( uint id, std::string name, uchar system );
User* createBasicUser( uint id, std::string name );
User* createSysAdmin( uint id, std::string name, uchar system );
};
#endif
users.cpp
Code:
#include "users.h"
User::User( uint id, std::string name )
: userID( id ), name( name ), systemKey( 0x00 ), accessKey( 0x00 ) {}
inline const uchar& User::checkSystemKey() const{
return systemKey;
}
inline const uchar& User::checkAccessKey() const{
return accessKey;
}
inline void User::setSystemKey( uchar& system ){
systemKey = systemKey | system;
}
inline void User::setAccessKey( uchar& access ){
accessKey = accessKey | access;
}
SysAdmin::SysAdmin( uint id, std::string name, uchar system )
: User( id, name ), mySystemKey( system ) {}
inline void SysAdmin::addSystemUser( User& user ){
user.setSystemKey( mySystemKey );
}
inline void SysAdmin::setUserAccess( User& user, uchar& access ){
user.setAccessKey( access );
}
SiteAdmin::SiteAdmin( uint id, std::string name, uchar system )
: SysAdmin( id, name, system ) {}
User* SiteAdmin::createBasicUser( uint id, std::string name ){
return new User( id, name );
}
User* SiteAdmin::createSysAdmin( uint id, std::string name, uchar system ){
return new SysAdmin( id, name, system );
}
main.cpp
Code:
#include <iostream>
#include <string>
#include "users.h"
int main(){
SiteAdmin Chris( 1, "Chris", 0x80 );
User* Eric = Chris.createBasicUser( 2, "Eric" );
User* Mike = Chris.createSysAdmin( 3, "Mike", 0x40 );
return 0;
}