2017-02-09 20 views
0

В этом проекте я должен создать класс Chain. Цепь будет списком значений (например, массива). Дело в том, что я должен создать эту цепочку без использования библиотеки STL.C++ Как реализовать этот один конструктор параметров?

Прямо сейчас, я должен реализовать этот один параметр конструктора:

Chain(const Object& item) 
{ 
    // Write something. 
} 

«Объект», кстати, только имя шаблона для класса.

У меня есть эти две частные переменные как часть класса:

size_t size_; 
Object *array_; 

Давайте говорить, что я хотел сделать этот звонок от основной:

Chain<int> d{7}; 

Вот только о том, проход 7 к одному параметру конструктор.

Как я могу реализовать этот конструктор параметров?

Кроме того, мне нужно, чтобы иметь возможность распечатать этот класс, если от основного типа I, например:

Chain<int> d{7}; // A chain containing 7 should be created. 
cout << d; // Should just print [7] 

Для того, чтобы сделать это, я должен реализовать этот перегруженный < < Оператор:

// Overloading the << operator. 
friend std::ostream &operator<<(std::ostream &out, const Chain &a_chain) 
{ 
    // Print the chain. 
    return out; 
} 

Покушение код до сих пор:

// One parameter constructor. 

Chain(const Object& item) 
{ 

array_ = new Object[item]; 
// array_=item; 
size_++; 
} 

// Overloading the << operator. 
friend std::ostream &operator<<(std::ostream &out, const Chain &a_chain) 
{ 

    cout << array_ << endl; 

    return out; 
} 
+1

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

+0

Все это жирным шрифтом довольно раздражает. Не говоря уже об отвлечении. –

+0

@ Бармар: что? http://melpon.org/wandbox/permlink/Yhx9q3HtkkEay4Ee –

ответ

1

С этими т В любом случае, лучше всего делать вещи за один шаг, чтобы убедиться, что у вас есть каждая маленькая работа, прежде чем добавить дополнительную сложность. См. How to debug small programs для более подробной информации.

Для кода (сейчас) вы показали, вот код, который делает точно то, что вы описали, и больше ничего.

template<typename T> 
struct Chain 
{ 
    T value; 
}; 

// Overloading the << operator. 
template<typename T> 
std::ostream &operator<<(std::ostream &out, const Chain<T> &a_chain) 
{ 
    out << a_chain.value << std::endl; 
    return out; 
} 

int main() 
{ 
    Chain<int> d{ 7 }; // A chain containing 7 should be created. 
    std::cout << d; // Should just print [7] 

    return 0; 
} 

Обратите внимание, что использование Object* array_ не нужно, чтобы получить этот фрагмент кода работает. Как только вы удовлетворены тем, что это делает, вы можете добавить еще несколько предметов. Например, если вы действительно пытаетесь реализовать свой собственный класс std::vector<> (плохая идея), следующим шагом может быть . Удалите шаблоны, поскольку это дополнительная сложность.

+0

Спасибо за ваш ответ Dan! –

+0

Правда, я не упоминал, что я не думаю, что мне разрешено добавлять новых членов в класс. Причина, по которой я имел дело с * array_, состоит в том, что я думаю, что именно там я добавляю членов. Как если бы я добавил 7, а затем 2, а затем 10 к объекту класса, а затем распечатал его, он должен распечатать '7 2 10' –

+0

@LiamHayes, как я уже сказал, ** точно **, что вы «показывается» и «ничего» больше. Нет ничего, указывающего, как «2» и «10» должны быть «добавлены». –