fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. //メンバーの基底クラス
  7. struct menber{
  8. virtual void normalaccess() = 0;
  9. virtual void adminaccess() = 0;
  10. };
  11.  
  12. //管理者のクラス
  13. struct root : public menber{
  14. void normalaccess(){
  15. cout << "rootなので通常アクセスが可能です" << endl;
  16. }
  17. void adminaccess(){
  18. cout << "rootなので管理者アクセスが可能です" << endl;
  19. }
  20. };
  21.  
  22. //通常メンバーのクラス
  23. struct normalmenber : public menber{
  24. void normalaccess(){
  25. cout << "normalmenberなので通常アクセスが可能です" << endl;
  26. }
  27. void adminaccess(){
  28. cout << "normalmenberなので管理者アクセスは不可能です" << endl;
  29. }
  30. };
  31.  
  32. //メンバー以外のクラス
  33. struct nomenber : public menber{
  34. void normalaccess(){
  35. cout << "nomenberなので通常アクセスは不可能です" << endl;
  36. }
  37. void adminaccess(){
  38. cout << "nomenberなので管理者アクセスは不可能です" << endl;
  39. }
  40. };
  41.  
  42. //受付
  43. struct front{
  44. const string rootid;
  45. const string normalid;
  46.  
  47. front(string rootid,string normalid) : rootid(rootid),normalid(normalid){}
  48.  
  49. menber * Login(const string & id){
  50. //IDを元にどのメンバーか判断
  51. if(rootid == id){
  52. return new root();
  53. }else if(normalid == id){
  54. return new normalmenber();
  55. }else{
  56. return new nomenber;
  57. }
  58. }
  59. };
  60.  
  61. int main(){
  62. //受付の設定
  63. front f("root","normalid");
  64.  
  65. //ログイン
  66. menber * menber1 = f.Login("root");
  67. menber * menber2 = f.Login("normalid");
  68. menber * menber3 = f.Login("husinsya");
  69.  
  70. //menber1による何かしらの操作
  71. menber1->normalaccess();
  72. menber1->adminaccess();
  73.  
  74. //menber2による何かしらの操作
  75. menber2->normalaccess();
  76. menber2->adminaccess();
  77.  
  78. //menber3による何かしらの操作
  79. menber3->normalaccess();
  80. menber3->adminaccess();
  81.  
  82. delete menber1;
  83. delete menber2;
  84. delete menber3;
  85. }
  86.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
rootなので通常アクセスが可能です
rootなので管理者アクセスが可能です
normalmenberなので通常アクセスが可能です
normalmenberなので管理者アクセスは不可能です
nomenberなので通常アクセスは不可能です
nomenberなので管理者アクセスは不可能です