2014-09-10 2 views
-1

Можно ли объявить переменную за пределами класса?Свойства, определенные вне декларации класса в C++

Например,

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

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

Нет, вы это с глобальной переменной, а не с собственностью. Когда он определен вне класса, он не является ничем. –

ответ

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; } 

Он компилируется.


Короче говоря, вы не можете просто объявить свойство, не объявляя, что его методы доступа, поэтому компилятор может знать, является ли свойство можно прочитать, переопределены и т.д.

+0

Спасибо, вот что я искал. Я должен был пробовать это. Благодарю. – jax

1

Все переменные в идеале должны быть определены в классе. Статический член должен быть инициализирован вне объявления класса, а нестатические члены должны быть инициализированы через конструктор. Глобальные данные, однако, могут быть объявлены и initilalized вне класса (никакого отношения с классом)

// 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 
+0

Итак, свойства должны определяться внутри определения класса? Это делает определение класса намного дольше. – jax

+0

Да, это правильно :-) –

Смежные вопросы