gpt4 book ai didi

c++ - C++类中的工厂依赖

转载 作者:行者123 更新时间:2023-11-28 05:53:20 26 4
gpt4 key购买 nike

考虑有两个类,名为 UserPlayer。从表面上看,这些类是指游戏中的用户(帐户)及其玩家。每个用户有一个播放器,而每个播放器可以由单个用户拥有。

当用户想要加入一个游戏时,一个Player实例被创建并且游戏抽象将拥有包括在内的玩家。

Player 类的实例不应由 User 以外的任何人创建。更准确地说,User 有一个方法 Player *createPlayer(...) 来创建一个 Player

这是如何实现的?我认为 User 类可以从 Player 继承,所以使用 Player 的 protected 构造函数就可以了。但是,您知道,这最终很奇怪。我们希望从 User 继承 Player,而不是相反。

类的伪代码(由 AndyG 建议):

class User {
String username
String password

func createPlayer(type: GameType, owner: Game) {
var player = Player(type: type, owner: owner)

return player
}
}

class Player {
private(set) Game owner
private(set) GameType type
Set<Weapon> loadout

UInt kills
UInt deaths

init(type: GameType, owner: Game) {
self.type = type
self.owner = owner
}
}

用法:

var user = User()    //  consider this gives you user
var game = Game() // consider there is a game

var player = user.createPlayer(.Deathmatch, game) // the way we should create it
var anotherPlayer = Player(.Deathmatch, game) // oops, compiler error.

最佳答案

您将 Player 的构造函数设为私有(private),Player 将 User 声明为好友。那么createPlayer可以正常调用Player的构造函数,其他类不行。尽量不要为 Player 声明任何其他 friend ,在某些情况下使用 friend 是可以的,但过度使用通常是一个不好的迹象。

关于c++ - C++类中的工厂依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34732420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com