我正在做一个国际象棋游戏,我想要一个数组。
如果我是正确的,在 Java 中,您可以有一个抽象的Piece
类,并具有King
或Queen
扩展该类。如果我要创建一个Piece
数组,则可以在该数组中的某个位置放置一个King
片段,并在另一个位置放置一个Queen
片段
有没有办法做到这一点与 C ++ 中的结构?
是的。您可以在 C++ 中创建一个abstract base class。只需将一个或多个方法设置为纯虚拟:
class Piece {
public:
Piece ();
virtual ~Piece ();
virtual void SomeMethod () = 0; // This method is not implemented in the base class, it a pure virtual method. Subcl must implement it
};
然后,您可以创建实现纯虚方法的子类
class King : public Piece {
// ... the rest of the class definition
virtual void SomeMethod (); // You need to actually implement this
};
您可以通过在类中添加纯虚函数来模拟 C++ 中的Abstract class。
在 c++ 中,你可以用类中的结构来做任何事情。
在 C++ 中,结构与类的区别仅在于成员的默认访问规范和继承期间。
没问题.
class AbstractPiece
{
public:
virtual void aFunction()=0; //this makes AbstractPiece an abstract class.
virtual ~AbstractPiece();
};
class King : public AbstractPiece
{
public:
virtual void aFunction(); //this is the one that would get called
virtual ~King();
};
然后,后来,
AbstractPiece* array[size];
和
array[index] = new King();
在 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 ::~()
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(19条)