简体   繁体   English

接口和实现C ++

[英]interface and implementation C++

I'm writing a code to separate interface and it's implementation but it has an error, I followed the correct syntax of interfaces and classes ,I have seen many examples on this subject, Knowing I'm a former C# programmer. 我正在编写代码以分离接口及其实现,但是它有一个错误,我遵循接口和类的正确语法,我在这个主题上看到了很多示例,知道我是前C#程序员。

code: 码:

#include "stdafx.h"
#include<iostream>
#include <String>
using namespace std;

            ///////////////////EMPLOYEE CLASS AND INTERFACE //////////////
class Interface_Employee
{

public:
    Interface_Employee() {}
    virtual ~Interface_Employee() {}
    virtual void print() = 0;    // "= 0" part makes this method pure virtual, and
                                 // also makes this class abstract.
};

class Employee : public Interface_Employee
{
    int ID, Age;
    Bank ac1, ac2; //composition
public:
    Employee(int a, int b, Bank account1, Bank account2)
        : ac1(account1), ac2(account2)
    {
        ID = a; Age = b;
    }
    ~Employee() {}


    // Provide implementation for the first method

    void print()
    {
        cout << "Age is:/n" << Age << "ID is:" << ID;
        ac1.print();
        ac2.print();
    }
};
                 ////////////BANK CLASS AND INTERFACE//////////////////


      class Interface_Bank
      {
          public:
          Interface_Bank() {}
          virtual ~Interface_Bank() {}
          virtual void print() = 0;    // "= 0" part makes this method pure virtual, and
                               // also makes this class abstract.
      };

      class Bank : public Interface_Bank
      {
        private:
        int balance, ID;

        public:
        Bank(int a, int b)
        {
          balance = a;
          ID = b;
        }
        ~Bank() {}

     // Provide implementation for the first method
        void print()
            {
              cout << "Balance is:/n" << balance << "ID is:" << ID;
            }


           };

        class Output {

           int main(void)
            {
            Bank a(1000, 1);
            Bank b(2000, 2);
            Employee c(2, 25, a, b);

            return 0;
           }

          };

Error: 错误:

Severity Code Description Project File Line Suppression State Error C3646 'ac1': unknown override specifier console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 22 严重性代码说明项目文件行抑制状态错误C3646'ac1 ':未知替代说明符 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 22
Error C2059 syntax error: ',' console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 22 错误C2059 语法错误:',' console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 22
Error C2238 unexpected token(s) preceding ';' 错误C2238 ';'之前的意外标记 console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 22 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 22
Error C2061 syntax error: identifier 'Bank' console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 24 错误C2061语法错误:标识符' Bank'console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 24
Error C2065 'account1': undeclared identifier console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 25 错误C2065'account1':未声明的标识符 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 25
Error C2065 'account2': undeclared identifier console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 25 错误C2065'account2':未声明的标识符 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 25
Error C2614 'Employee': illegal member initialization: 'ac1' is not a base or member console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 25 错误C2614 '雇员':非法成员初始化:'ac1'不是基础或成员 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 25
Error C2614 'Employee': illegal member initialization: 'ac2' is not a base or member console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 25 错误C2614 '雇员':非法成员初始化:'ac2'不是基础或成员 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 25
Error C2065 'ac1': undeclared identifier console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 37 错误C2065'ac1':未声明的标识符 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 37
Error C2228 left of '.print' must have class/struct/union console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 37 '.print'左边的错误C2228 必须具有class / struct / union console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 37
Error C2065 'ac2': undeclared identifier console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 38 错误C2065'ac2':未声明的标识符 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 38
Error C2228 left of '.print' must have class/struct/union console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 38 '.print'左边的错误C2228 必须具有class / struct / union console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 38
Error C2661 'Employee::Employee': no overloaded function takes 4 arguments console_App c:\\users\\dell_alrfou\\source\\repos\\console_app\\console_app\\console_app.cpp 81 错误C2661 '雇员::雇员':没有重载函数采用4个参数 console_App c:\\ users \\ dell_alrfou \\ source \\ repos \\ console_app \\ console_app \\ console_app.cpp 81

You need to declare or define the Bank class before you attempt to use it. 您必须先声明或定义Bank类,然后再尝试使用它。

You need to move the definition of Bank (and its Interface_Bank base class) to before class Employee . 您需要将Bank的定义(及其Interface_Bank基类)移到class Employee类之前。

  1. Before use Bank , you should declare or define it 使用Bank之前,应先声明或定义它
  2. int main() shouldn't in a class int main()不应在class

The following code could work: 以下code可以工作:

#include<iostream>
#include <String>
using namespace std;

class Interface_Bank
{
public:
    Interface_Bank() {}
    virtual ~Interface_Bank() {}
    virtual void print() = 0;
};

class Bank : public Interface_Bank
{
private:
    int balance, ID;

public:
    Bank(int a, int b) : balance(a), ID(b)
    {
    }
    ~Bank() {}

    void print()
    {
        cout << "Balance is:/n" << balance << "ID is:" << ID;
    }
};

class Interface_Employee
{
public:
    Interface_Employee() {}
    virtual ~Interface_Employee() {}
    virtual void print() = 0;
};

class Employee : public Interface_Employee
{
private: 
    int ID, Age;
    Bank ac1, ac2;
public:
    Employee(int a, int b, Bank account1, Bank account2)
        : ID(a), Age(b), ac1(account1), ac2(account2)
    {
    }
    ~Employee() {}

    void print()
    {
        cout << "Age is:/n" << Age << "ID is:" << ID;
        ac1.print();
        ac2.print();
    }
};

int main(void)
{   
    Bank a(1000, 1);
    Bank b(2000, 2);
    Employee c(2, 25, a, b);
    c.print();
    return 0;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM