3

我有一个带有const抽象成员的类。由于它是抽象的,因此对象必须位于更高的范围内。但是,它可以在这个更高的范围内进行编辑。我已经制作了这个 MWE,并添加了解释我想要达到的目标的评论(即我知道这并没有达到我想要的目标)。

除了注释掉它之外,还可以做些什么来阻止用户编辑对象。最好是一个白痴证明方法(最好是编译错误)

#include <iostream>

class Foo
{
    private:
        const int * p_abstract_const;   
        //int my application this is a pointer to abstract object
    public:
        Foo(const int * p_new_concrete_const)
        {
            p_abstract_const  = p_new_concrete_const;
        }

        void printX()
        {
            std::cout << *p_abstract_const << std::endl;
        }
};

int main()
{
    int concrete_nonconst = 666;
    Foo foo(&concrete_nonconst);    // I want this NOT to compile
  //const int concrete_const(1);
  //Foo foo(&concrete_const);       // only this should compile 
    foo.printX();
    concrete_nonconst=999;          // so that this will NOT be possible
    foo.printX();

}
4

1 回答 1

0

您可以在不提供实现的情况下将非常量 int* 构造函数设为私有:

class Foo
{
    private:
        const int * p_abstract_const;   
        //int my application this is a pointer to abstract object
        Foo(int * p_new_concrete_const);

    public:
        Foo(const int * p_new_concrete_const)
        {
            p_abstract_const  = p_new_concrete_const;
        }
        void printX()
        {
            std::cout << *p_abstract_const << std::endl;
        }
};
int main()
{
    int concrete_nonconst = 666;
    Foo foo(&concrete_nonconst);    // This won't compile
    const int concrete_const(1);
    Foo foo(&concrete_const);       // But this will
    foo.printX();


    concrete_nonconst=999;          // so that this will NOT be possible
    foo.printX();
}
于 2013-05-21T21:06:49.340 回答