Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 00:38   #1
Gtx541
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 24
Стрелка Вопрос про new и вызов конструктора

При вызове операции new нужно передать параметр в констуктор класса.
Как это можно реализовать?

Код:
#include <iostream>
#include <conio.h>
using namespace std;

// Некий класс
class Sample{
	int x;
public:
	Sample();
	Sample(int value);
};

// Конструктор 1
Sample::Sample(){
	x = 0;
	cout << x << endl;
}

// Конструктор 2
Sample::Sample(int value){
	x = value;
	cout << x << endl;
}

void main () {
	// Задача:
	// нужно создать двумерный динамический массив
	// с вызовом конструктора 2 (с передачей параметра)

	// делаю так:
	int x = -2;
	int a1 = 3;
	int a2 = 5;

	Sample ** arr = new Sample * [a1];
	for (int i=0; i<a1; i++){
		arr[i] = new Sample [a2];			// как в этой строке вызвать конструктор 2 ?
	}

	_getch();
}
Gtx541 вне форума Ответить с цитированием
Старый 20.05.2010, 06:39   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Сообщение от Б. Страуструп
Не существует способа явного указания аргументов конструктора (за исключением использования списка инициализации) при объявлении массива.
Поэтому приходится извращаться:
Код:
	Sample *** arr = new Sample ** [a1];
	for (int i=0; i<a1; i++){
		arr[i] = new Sample * [a2];
	for (int i = 0; i < a1; i++)
		for (int j = 0; j < a2; j++)
			arr[i][j] = new Sample(x);
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 20.05.2010, 08:46   #3
Gtx541
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 24
По умолчанию

Да, но этот способ влечёт дополнительные расходы памяти.


Ага... А как понять эти слова:
Цитата:
за исключением использования списка инициализации
Я знаю что такое список инициализации, но как его вызвать при созданиии МАССИВА экземпляров, а не единичного экземпляра.
Подскажите пожалуйста?

Последний раз редактировалось Gtx541; 20.05.2010 в 08:55.
Gtx541 вне форума Ответить с цитированием
Старый 20.05.2010, 09:05   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
как его вызвать при созданиии МАССИВА экземпляров
Примерно так, не проверял:
Код:
Sample Array[3] = {Sample(1), Sample(2), Sample(3)};
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 20.05.2010, 10:08   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По-моему ты кое что забыл:
Код:
Sample Array[3] = {new Sample(1), new Sample(2), new Sample(3)};
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2010, 12:18   #6
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Stilet, вот и нет. Объявление Sample Array[3] создает массив из непосредственно объектов, а не указателей на них. Поэтому и в скобках никких new не надо - new выделяет память и возвращает указатель. Гром првильно пример привел.
Pashan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про C# BanzoO Общие вопросы C/C++ 1 02.07.2009 03:47
Вопрос про memo. Алён@ Компоненты Delphi 1 02.02.2009 13:23
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос про IP ЧИЖ Работа с сетью в Delphi 1 23.06.2008 13:53
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24