Для классов вы можете просто сказать:
class Test{
int a;
Test(int a);
}
Test::Test(int a) {
this->a=a;
}
Названия функций получают "classname ::" перед ними, когда объявляются вне класса.
Как мне это сделать для структур?
struct Test {
int a;
Test(int a);
}
Как написать функцию для этого теста struct вне объявления структуры, чтобы он мог быть вызван только тестовой структурой?
В C++ struct
по существу те же, что и class
es, за исключением уровней защиты по умолчанию: class
es по умолчанию - private
, struct
to public
. Чтобы определить эту функцию за пределами struct
чтобы она могла быть вызвана только из члена, объявите ее как конфиденциальную, затем определите ее как обычно:
struct Test {
private:
int a;
Test(int a);
};
Test::Test(int a) {
this->a=a;
}
Кроме того, вместо того, чтобы модифицировать a
член в теле конструктора, вы должны использовать список инициализаторов. Это устанавливает значение элемента до того, как экземпляр будет полностью сконструирован. Это не так важно только с int
, но это хорошая практика.
struct Test {
private:
Test(int a) : a(a) {}
int a;
};
Так же. Разница между struct
и class
в C++ - это только видимость по умолчанию для членов (private для class
, public для struct
).
На самом деле, это не просто функция, это конструктор class
/struct
Test
.
ForEveR прав. Как и в вопросе, у вас может быть член структуры, определенный как:
struct Test{
int a;
Test(int a);
};
Test::Test(int a) {
this->a=a;
}
Обратите внимание, что члены структуры по умолчанию являются общедоступными. По умолчанию класс memebers является закрытым.
Как написать функцию для этого теста struct вне объявления структуры
Сделайте именно то, что вы сделали для первого. Оба являются типами классов, независимо от того, используете ли вы ключевое слово class
или struct
для их представления.
Единственная разница - доступность по умолчанию для членов и базовых классов: private, если вы используете class
, и public, если вы используете struct
.
так что его можно вызывать только тестовой структурой?
Если вы имеете в виду, что вы хотите, чтобы он был закрытым (как в первом примере), вам придется делать это явно, поскольку доступность по умолчанию является общедоступной:
struct Test {
int a;
private:
Test(int a);
};
Лично я бы использовал более обычный class
если там что-то непубличное.