C++中的抽象/基本结构

我正在做一个国际象棋游戏,我想要一个数组。

我正在做一个国际象棋游戏,我想要一个数组。

如果我是正确的,在 Java 中,您可以有一个抽象的Piece类,并具有KingQueen扩展该类。如果我要创建一个Piece数组,则可以在该数组中的某个位置放置一个King片段,并在另一个位置放置一个Queen片段

有没有办法做到这一点与 C ++ 中的结构?

8

是的。您可以在 C++ 中创建一个abstract base cl。只需将一个或多个方法设置为纯虚拟:

cl Piece {
    public:
        Piece ();
        virtual ~Piece ();
        virtual void SomeMethod () = 0;  // This method is not implemented in the base cl,  it a pure virtual method. Subcles must implement it
 };

然后,您可以创建实现纯虚方法的子类

cl King : public Piece {
    // ... the rest of the cl definition
    virtual void SomeMethod (); // You need to actually implement this
};
4

您可以通过在类中添加纯虚函数来模拟 C++ 中的Abstract cl

在 c++ 中,你可以用类中的结构来做任何事情。
在 C++ 中,结构与类的区别仅在于成员的默认访问规范和继承期间。

3

没问题.

cl AbstractPiece
{
public:
virtual void aFunction()=0; //this makes AbstractPiece an abstract cl.
virtual ~AbstractPiece();
};
cl King : public AbstractPiece
{
public:
virtual void aFunction(); //this is the one that would get called
virtual ~King();
};

然后,后来,

AbstractPiece* array[size];

array[index] = new King();
1

在 c++ 中,您可以使用抽象类或结构:

#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/construct.hpp>
using namespace std;
struct piece
{
    virtual ~piece() {};
    virtual void dosomething() = 0;
};
struct king : piece
{
    ~king() { cout << __PRETTY_FUNCTION__ << endl; }
    void dosomething() { cout << __PRETTY_FUNCTION__ << endl; }
};
struct queen : piece
{
    ~queen() { cout << __PRETTY_FUNCTION__ << endl; }
    void dosomething() { cout <<  __PRETTY_FUNCTION__ << endl; }
};
struct  : piece
{
    ~() { cout << __PRETTY_FUNCTION__ << endl; }
    void dosomething() { cout << __PRETTY_FUNCTION__ << endl; }
};

用法:

int main()
{
    typedef std::vector< piece * > pieces_t;
    pieces_t pieces;
    pieces.push_back(new queen());
    pieces.push_back(new king());
    pieces.push_back(new ());
    pieces.push_back(new ());
    pieces.push_back(new ());
    pieces.push_back(new ());
    // calling dosomething()
    std::for_each(pieces.begin(), pieces.end(), 
          boost::lambda::bind(&piece::dosomething, boost::lambda::_1));
    // destructing
    std::for_each(pieces.begin(), pieces.end(), 
          boost::lambda::bind(boost::lambda::delete_ptr(), boost::lambda::_1));
}

输出:

virtual void queen::dosomething()
virtual void king::dosomething()
virtual void ::dosomething()
virtual void ::dosomething()
virtual void ::dosomething()
virtual void ::dosomething()
virtual queen::~queen()
virtual king::~king()
virtual ::~()
virtual ::~()
virtual ::~()
virtual ::~()

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(498)
如何创建一个简单的cpu基准
上一篇
让用户以编程方式加入 discord服务器
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(37条)