C++类——派生类中的构造函数声明

C++类——派生类中的构造函数声明,c++,class,constructor,derived,C++,Class,Constructor,Derived,套接字具有一个构造函数,该构造函数将winsock套接字作为参数并将其存储在私有变量中: Socket::Socket(SOCKET s) { this->s = s; } 我正在尝试创建一个GameSocket类,该类将解析来自我的Socket类的数据: class GameSocket : public Socket { protected: void ParseData(unsigned char* data, int size); }; 在这些类旁边,我有

套接字具有一个构造函数,该构造函数将winsock套接字作为参数并将其存储在私有变量中:

Socket::Socket(SOCKET s) {
    this->s = s;
}
我正在尝试创建一个GameSocket类,该类将解析来自我的Socket类的数据:

class GameSocket : public Socket {

protected:

    void ParseData(unsigned char* data, int size);

};
在这些类旁边,我有一个服务器类,可以在需要时创建新的套接字:

GameSocket* Server::Accept() {

    SOCKET a = accept(s, 0, 0);
    if(a==SOCKET_ERROR) {
        return 0;
    }
    else {
        return new GameSocket(a);
    }

}
但是,这给了我最后一个错误:

error C2664: 'GameSocket::GameSocket' : cannot convert parameter 1 from 'SOCKET' to 'const GameSocket &'
在处理派生类时,我肯定缺少构造函数的某些内容


不要对我太苛刻,我对C++和OOP

在GAMESOCKET

的构造函数中添加了新的内容
class GameSocket : public Socket {

public:

    // you need to add
    GameSocket(SOCKET s) : Socket(s) {}

protected:

    void ParseData(unsigned char* data, int size);

};

为GameSocket添加构造函数

class GameSocket : public Socket {

public:

    // you need to add
    GameSocket(SOCKET s) : Socket(s) {}

protected:

    void ParseData(unsigned char* data, int size);

};

GameSocket的construcotr必须接收套接字参数,然后将其传递给初始值设定项列表中的套接字基类:

class GameSocket : public Socket {
public:
    GameSocket(SOCKET s) : Socket(s) {}
    ...
};
GameSocket必须从套接字派生,而不是持有对套接字的引用,这有什么原因吗?GameSocket正在或应该管理套接字状态和序列化,而低级套接字接口包含在套接字类中。您的服务器类可以创建套接字类的实例,然后传递指向GameSocket类的指针以管理它们

class GameSocket {
public:
    GameSocket(Socket *s) : s_(s) {}
    ~GameSocket() {
        s_->close();
        delete s_;
    }
    ...
private:
    Socket *s_;
};

GameSocket* Server::Accept() {
    // accept function added to Socket class
    Socket *newSocket = serverSocket->accept();
    // create GameSocket with newly opened Socket
    return newSocket ? new GameSocket(newSocket) : NULL;
}

GameSocket的construcotr必须接收套接字参数,然后将其传递给初始值设定项列表中的套接字基类:

class GameSocket : public Socket {
public:
    GameSocket(SOCKET s) : Socket(s) {}
    ...
};
GameSocket必须从套接字派生,而不是持有对套接字的引用,这有什么原因吗?GameSocket正在或应该管理套接字状态和序列化,而低级套接字接口包含在套接字类中。您的服务器类可以创建套接字类的实例,然后传递指向GameSocket类的指针以管理它们

class GameSocket {
public:
    GameSocket(Socket *s) : s_(s) {}
    ~GameSocket() {
        s_->close();
        delete s_;
    }
    ...
private:
    Socket *s_;
};

GameSocket* Server::Accept() {
    // accept function added to Socket class
    Socket *newSocket = serverSocket->accept();
    // create GameSocket with newly opened Socket
    return newSocket ? new GameSocket(newSocket) : NULL;
}

构造函数不应该在公共中:类的块吗?C++的烦恼之一:构造函数不是可继承的。我确信这有很好的理由,但我希望公共构造函数在我不提供自己的时被继承,该死!构造函数不应该在公共中:类的块吗?C++的烦恼之一:构造函数不是可继承的。我确信这有很好的理由,但我希望公共构造函数在我不提供自己的时被继承,该死!说得好。我希望Ask-丹尼尔会考虑选择继承而不是继承。在这样的情况下,构图选项似乎被忽视了。这是一个很好的观点。我希望Ask-丹尼尔会考虑选择继承而不是继承。在这种情况下,合成选项似乎被忽略了。