В C++, каков самый эффективный путь в определении очень простого объекта

Предположим, что я определяю объект подложки

class surface
{
private:
    vector points_;
    vector hexFaces_;
}

Я уже написал пункт класс, который очень необходим, но что касается hexFace , на самом деле это очень просто, это - просто список этикеток на четыре пункта , который является международный [4]. И я не должен делать никакой сложной операции на нем.

Таким образом, мой вопрос: каков самый эффективный путь в определении такого hexFace объект. Я должен использовать структуру, или я должен пойти с классом или чем-либо еще? Что вы сделали бы? Спасибо

И если я должен пойти с классом, могу я определяющий другой класс в текущем классе гнездящимся способом? Если я могу, я должен написать его конструкторам в этом файле также?

Структуре нужен конструктор, чтобы инициализировать его?

0
nl ja de
Вы написали c орфографическими ошибками класс ключевое слово.
добавлено автор Kerrek SB, источник
There' s никакое различие в производительности между структура и класс .
добавлено автор n.m., источник
struct' s и классы эквивалентны во всех отношениях кроме их декларации (дефолт структур общественности, дефолт классов к частному)
добавлено автор hexist, источник
Да, используйте внутренние классы/структуры. И да, можно определить конструкторов и методы для внутренних классов в том же самом заголовке и единице компиляции.
добавлено автор Sim, источник

1 ответы

Вы задаете несколько вопросов:

, каков самый эффективный путь в определении такого объекта hexFace.

Эффективность во время выполнения будет о том же самом для любого решения, которое вы выбираете. Эффективность линий кода или эффективность интеллектуальной мощи программиста автогрейдера, вероятно, более ценна.

Если бы вы ограничиваетесь ПредC++ 11 особенностей, я использовал бы:

struct hexFace {
  int labels_[4];
};

Если можно использовать C++ 11 особенностей, попробуйте:

class surface
{
private:
    std::vector points_;
    std::vector> hexFaces_;
}

я должен использовать структуру, или я должен пойти с классом или чем-либо еще?

struct and class are nearly synonymous. Use whichever you think expresses your intent more clearly. As for "something else", try std::array

может я определяющий другой класс в текущем классе гнездящимся способом?

Да, вы можете. Попробуйте:

class surface
{
private:
    class hexFace { public: int lables[4]; };
    vector points_;
    vector hexFaces_;
};

, Если я могу, я должен написать его конструкторам в этом файле также?

Вы можете, или вы можете написать его в другом месте, или вы можете опустить определенного пользователями конструктора в целом.

Вот то, как написать его действующий:

class surface {
public:
    class hexFace { public: hexFace() { std::cout << "inline constructor!\n" } };
}

Вот то, как написать его внешне

class surface {
  public:
  class hexFace {
    public:
      hexFace();
  };

// in another file ...
surface::hexFace::hexFace() { std::cout << "extern constructor\n"; }

структуре нужен конструктор, чтобы инициализировать его?

Ни один класс , ни , структура требует определенного пользователями конструктора, но оба позволяют им.

struct X {
  X() { std::cout << "in struct constructor!\n"; }
};
class Y {
  public: 
    Y() { std::cout << "in class constructor!\n"; }
};
3
добавлено
Хорошо, для удобства дальнейшего обслуживания, я напишу внешний класс. Между прочим, может класс, не имея cpp файла, если я объявляю всех конструкторов и функции членства как действующих?
добавлено автор Daniel, источник
Да, вам не нужен файл CPP, если все функции членства (включая конструктора) определяются в заголовочном файле.
добавлено автор Robᵩ, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest