静态对象指针
static Object Pointer
我想在方法内部创建一个静态对象。方法的类有一个类型为Player的指针。Phayer是一个抽象类。现在我想让指针指向一个从Player继承的Object。当Methode关闭时,该引用不应该丢失。指针初始化如下:
pragma once
include "Player.h"
include "Matchfield.h"
class Game
{
public:
Game();
~Game();
void start();
private:
Player *playerone;
Player *playertwo;
Matchfield gamefield;
};
现在我是这样做的:
Game::Game()
{
for (int i = 0; i < 2; i++) {
switch (CLI::getplayer())
{
case 0:
{
static HumanPlayer x;
playerone = &x;
}
case 1:
{
BotOne x;
playerone = &x;
}
default:
break;
}
}
}
然后,另一个方法尝试从指针引用的对象中调用一个方法。
int actMove;
int inheight;
while (true) {
actMove = playerone->play(gamefield);
inheight = gamefield.columnHeight(actMove);
... Bla Bla just boring stuff
我犯了一个错误,不可能找到我的对象,为什么?不是静态的吗?
谢谢你的回答,我很感激!:(
为问题添加极简主义示例:
class Player
{
public:
Player() = default;
~Player() = default;
virtual int play(Matchfield ActField) = 0;
bool ishuman;
};
Game::Game()
{
static HumanPlayer x;
playerone = &x;
}
HumanPlayer不是一个抽象类;现在我想在其他地方使用指针Playerone。例如这里;在Humanplayer中播放将返回一个int;
int Game::play(){
return = playerone->play();
}
要回答有关类中static
指针的问题:
头文件:
class Game
{
public:
Game();
~Game();
void start();
private:
static Player *playerone;
static Player *playertwo;
Matchfield gamefield;
};
源文件:
Player * Game::playerone = nullptr;
Player * Game::playertwo = nullptr;
Game::Game()
{ ; }
Game::~Game()
{
delete playerone;
delete playertwo;
}
void Game::start()
{
delete playerone;
delete playertwo;
// Example:
playerone = new Human;
playertwo = new Bot;
}
由于指针是变量,它们遵循与类中的静态变量相同的语法。
static
关键字意味着所有Game
实例都有一个实例,并且其派生类的实例。它们都共享相同的playerone
和playertwo
。
编辑1:方法中的静态
方法中的static
变量只能在方法中访问。static
关键字表示变量将在执行离开函数后存在。因此,下次输入函数时,变量将具有与上次执行函数时相同的值。
void AddOne()
{
static int value = 0;
std::cout << "Previous value: " << value << "n";
++value;
std::cout << "Value after add: " << value << "nn";
}
int main()
{
AddOne();
AddOne();
AddOne();
AddOne();
return 0;
}
上面的代码演示了static
变量的生存期。
您可以将指针声明为静态,这样它在退出方法时就不会丢失引用,但无论何时实例化类型为Game
的对象,指针都将已填充该值。你可以做:
class Game
{
public:
Game();
~Game();
void start();
private:
static Player *playerone;
static Player *playertwo;
Matchfield gamefield;
};
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它