2011-01-01 2 views
0

ИТАК я есть класс Vector:Constructor Определение

#include <cstdlib> 

class Vec 
{ 
private: 
    size_t size; 
    int * ptab; 

public: 
    Vec(size_t n); 
    ~Vec() {delete [] ptab;} 

    size_t size() const {return size;} 
    int & operator[](int n) {return ptab[n];} 
    int operator[](int n) const {return ptab[n];} 

    void operator=(Vec const& v); 
}; 

inline Vec::Vec(size_t n) : size(n), ptab(new int[n]) 
{ } 

и проблема заключается в том, что в одном из моих домашних упражнений я должен продлить конструктор четкости, так что все элементы будут инициализированы нулями. Я думал, что знаю основы, но не могу пройти через эту динамическую матрицу. -

ps. SRY для Грамма и других ошибок;)

ответ

10

В новом выражении- вы можете использовать пару круглых скобок в качестве инициализатора, чтобы значения инициализации (который для массива int нулевого инициализирует каждый элемент) объект ,

new int[n]() 

Другие:

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

  • Ваш оператор копирующего присваивания должен иметь тип возвращаемого Vec&, не void и вернуть *this в соответствии с общими конвенциями и работать со стандартными шаблонами контейнеров.

  • Вы должны рассмотреть вопрос об объявлении единственного параметра конструктора explicit, если вы действительно хотите включить неявные преобразования из size_t в Vec.

+0

Насколько распространено это правило «явного»? –

+0

@ 7vies: Я не совсем уверен, что вы имеете в виду, нет конкретного правила, которое я знаю об использовании «явного». –

+0

Извините, я имею в виду, как обычно люди будут определять конструкторы по умолчанию, как это делают некоторые/большинство/все опытные программисты? –