gpt4 book ai didi

c++ - 使每个派生类的父类成员不可修改

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:38 26 4
gpt4 key购买 nike

我想知道如何使每个派生类都不同的父类成员不可修改。

我的代码现在正确地分配了它的值(取决于调用父类构造函数的子类),但是 m_type 可以很容易地修改(在 myfunction 中,对于示例),而这正是我想要避免的。

#include <iostream>

enum Piece_type{ king=1, queen=3, rook=3, bishop=4, knight=5, pawn=6};

class Piece
{
protected:
Piece_type m_type; // static Piece_type m_type; <- doesn't work

Piece(Piece_type ex): m_type(ex) {}
};

class Pawn: public Piece
{
public:
Pawn():Piece(pawn) {} // To initialise m_type as pawn for all my Pawn objects

void myfunction()
{
std::cout<<"My piece type is "<< m_type<<std::endl;;
m_type= knight; // This is the assignation I want to avoid happening
std::cout<<"My new piece type i "<<m_type<<std::endl;
}
};

我的问题与 this one 有关,但继承似乎无法声明静态变量并通过成员初始值设定项定义其值。

我在 this question 中找到了如何从子类调用父类/基类构造函数.

提前致谢

爱德华多


编辑

为了不让任何人感到困惑,我稍微修改了它,因为 const 在我所说的地方确实有效。

最佳答案

好吧,您并没有陷入尝试在没有成员初始值设定项列表的情况下使用 const 成员变量的常见错误,所以 const 就是您真正需要的:

class Piece
{
protected:
Piece_type const m_type;

Piece(Piece_type ex) : m_type(ex) { }
};

class Pawn : public Piece
{
public:
Pawn() : Piece(pawn) { }

void myfunction()
{
// m_type = knight; // Compile-time error
}
};

关于c++ - 使每个派生类的父类成员不可修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450768/

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