如何处理枚举,使其无法从Main.cpp中看到

  • 本文关键字:Main cpp 何处理 处理 枚举 c++
  • 更新时间 :
  • 英文 :


这是我的主文件:

#include "MyHeader.h"
int main(void)
{
MyClass Test1;
Test1.set_a_thing();
return 0;
}

这是头文件:

#ifndef MY_CLASS_H_
#define MY_CLASS_H_
class MyClass
{
public:
MyClass();
~MyClass();
enum A_few_Things { yes, no, sometimes, dont_know };
enum MyClass::A_few_Things set_a_thing();
private:
A_few_Things a_few_things = A_few_Things::dont_know;
};
#endif // !MY_CLASS_H_

这是相关的cpp文件:

#include "MyHeader.h"
MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}
MyClass::A_few_Things MyClass::set_a_thing()
{
// for example, return Yes
return A_few_Things::yes;
}

线路enum A_few_Things { yes, no, sometimes, dont_know };似乎必须是公共的。如果它在private:字段中,则会出现错误消息:

E0471类"*"没有名称为"*"的标识符">

如何确保enum本身不能从Main.cpp调用,而只有从Main.cpp调用的函数set_a_thing()才能看到并处理它?

有一个特殊的关键字吗?

例如,我希望函数set_a_thing返回yes

我对C++还相当陌生。我唯一关心的是,我想从一开始就学会它。当你说没有必要采取不同的做法时,那么。。。

感谢大家,尤其是@Eljay🤝你让我走上了正确的道路。enum MyClass::A_few_Things set_a_thing();不需要返回任何内容。在函数内部,设置了a_few_things

#ifndef MY_CLASS_H_
#define MY_CLASS_H_
class MyClass
{
public:
MyClass();
~MyClass();
void set_a_thing();
private:
enum A_few_Things { yes, no, sometimes, dont_know };
A_few_Things a_few_things = A_few_Things::dont_know;
};
#endif // !MY_CLASS_H_

在cpp文件中:

void MyClass::set_a_thing()
{
a_few_things = MyClass::A_few_Things::dont_know;
}

在Main.cpp中,您可以像往常一样调用函数:MyClass Test1; Test1.set_a_thing();

#include <iostream>
class MyClass
{
public:
enum ET_A_few_Things { yes = -1 , no , sometimes = 100, dont_know };   //::  ( 1 )
ET_A_few_Things set_a_thing();                                         //::  ( 2 )
ET_A_few_Things set_a_thing( ET_A_few_Things );                        //::  ( 3 )
private:
ET_A_few_Things a_few_things = dont_know;
};
MyClass::ET_A_few_Things MyClass::set_a_thing()
{
// for example, return Yes
return ( a_few_things = no );      //::  ( 4 )
}
MyClass::ET_A_few_Things MyClass::set_a_thing( MyClass::ET_A_few_Things NewValue_A )
{
// for example, return Yes
return ( a_few_things = NewValue_A );
}

enum class ET_otherThings{ yes , no , sometimes = 73 };       //:: ET_otherThings{ 0 , 1 , 73 };       //::  ( 5 )

void showNumber( ET_otherThings value_A )                                                             
{
std::cout << static_cast< int >( value_A ) << std::endl;                                             
}
int main()
{  
MyClass Test1;
std::cout << Test1.set_a_thing() << std::endl;                            //:: result = 0
std::cout << Test1.set_a_thing( MyClass ::sometimes ) << std::endl;       //:: result = 100
// Test1.set_a_thing( ET_otherThings:: sometimes )                         //:: Error: wrong argument
// showNumber( MyClass:: sometimes );                                      //:: Error: wrong argument
showNumber( ET_otherThings::sometimes );                                   //:: result = 73
return 0;
}

*(1(::请记住:枚举是数字类型。每个值都是一个数字。从默认计数开始为0。在本例中,以-1开头。

*(2(:这里只使用类型名称";"ET_A_few_Things"enum";仅用于创建。在一个";MyClass";不要使用";MyClass::";没有这个代码的becouse看起来更干净。

*(3(::允许拾取值的重载函数。

*(4(::第一个设置值,下一个返回新值。它的类函数,所以您不必使用ET_A_few_Things::no。不可见的指针可以正确地完成工作:;这->a_flow_things=这个->否">

*(5(::enum类-用于创建enumType的其他方法。在阶级内部使用";enum";就像在(1(中一样,在其他情况下更好的选择是pick";enum类";。

如果只想从类访问使用此枚举类型,请将此类型放入privateprotected访问说明符

相关内容

最新更新