C ++: написание функции для структуры вне этой структуры? [Дубликат]

0

Для классов вы можете просто сказать:

class Test{
    int a;
    Test(int a);
}

Test::Test(int a) {
    this->a=a;
}

Названия функций получают "classname ::" перед ними, когда объявляются вне класса.

Как мне это сделать для структур?

struct Test {
    int a;
    Test(int a);
}

Как написать функцию для этого теста struct вне объявления структуры, чтобы он мог быть вызван только тестовой структурой?

  • 0
    Разница между структурами и классами заключается в том, что члены структуры по умолчанию являются открытыми. Но члены класса по умолчанию закрыты.
Теги:
struct

4 ответа

0
Лучший ответ

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

Так же. Разница между struct и class в C++ - это только видимость по умолчанию для членов (private для class, public для struct).

На самом деле, это не просто функция, это конструктор class/struct Test.

0

ForEveR прав. Как и в вопросе, у вас может быть член структуры, определенный как:

struct Test{
    int a;
    Test(int a);
};

Test::Test(int a) {
    this->a=a;
}

Обратите внимание, что члены структуры по умолчанию являются общедоступными. По умолчанию класс memebers является закрытым.

0

Как написать функцию для этого теста struct вне объявления структуры

Сделайте именно то, что вы сделали для первого. Оба являются типами классов, независимо от того, используете ли вы ключевое слово class или struct для их представления.

Единственная разница - доступность по умолчанию для членов и базовых классов: private, если вы используете class, и public, если вы используете struct.

так что его можно вызывать только тестовой структурой?

Если вы имеете в виду, что вы хотите, чтобы он был закрытым (как в первом примере), вам придется делать это явно, поскольку доступность по умолчанию является общедоступной:

struct Test {
    int a;
private:
    Test(int a);
};

Лично я бы использовал более обычный class если там что-то непубличное.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню