在C ++中的类声明之外定义的属性

时间:2014-09-10 08:47:24

标签: c++-cli

是否可以在类之外声明变量?

例如,

// a.h
ref class A
{
public:
    property String^ P;
private:
    String ^p;
};

// a.cpp
/* Define property here */

2 个答案:

答案 0 :(得分:1)

理想情况下,所有变量都应在类中定义。静态成员需要在类声明之外初始化,而非静态成员需要通过构造函数初始化。但是,全局数据可以在类之外声明和初始化(与类无关)

// a.h
extern int ga;
class A
{
   int m_a;
   static int s_a;
public:
    A(int aa) : m_a(aa){
      // constructor
    }
};

// a.cpp
int ga = 4; // global data initialization
int A::s_a = 0; // class static data initialization

答案 1 :(得分:1)

你至少可以这样做,我刚刚测试过:

// a.h
ref class A
{
public:
    property String^ P { String^ get(); void set(String^); }
private:
    String ^p;
};

你定义的是:

// a.cpp
String^ A::P::get() { return p; }
void A::P::set(String^ value) { p = value; }

它编译。<​​/ p>


简而言之,您不能在不声明其访问者的情况下声明属性,因此编译器可以知道该属性是否可以被读取,写入,覆盖等。