Member 12652642 Ответов: 2

Построение объекта с несколькими аргументами


Привет,

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

Что я уже пробовал:

Круг круг (заливка (1, Цвет:: Черный));

Вот код для этого класса :

class Circle : public Shape
	{
	public:
		Circle(Point const & center, double diameter, Fill const & fill,
			Stroke const & stroke = Stroke())
			: Shape(fill, stroke), center(center), radius(diameter / 2) { }
		std::string toString(Layout const & layout) const
		{
			std::stringstream ss;
			ss << elemStart("circle") << attribute("cx", translateX(center.x, layout))
				<< attribute("cy", translateY(center.y, layout))
				<< attribute("r", translateScale(radius, layout)) << fill.toString(layout)
				<< stroke.toString(layout) << emptyElemEnd();
			return ss.str();
		}
		void offset(Point const & offset)
		{
			center.x += offset.x;
			center.y += offset.y;
		}
	private:
		Point center;
		double radius;
	};

2 Ответов

Рейтинг:
1

Jochen Arndt

Просто передайте необходимые параметры при построении объекта:

// Assuming you have the variables x, y, and diam, and
//  Point has two members which can be passed to a constructor
Circle circ(Point(x, y), diam, Fill(1, Color::Black));


Вы также должны избегать использования одного и того же имени для параметров и переменных-членов. При использовании одного и того же имени необходимо указать this ключевое слово с членами, чтобы сообщить компилятору, какой объект должен быть использован.

Лучшая реализация будет использовать другие имена (например, используя префикс с переменными-членами):
class Circle : public Shape
{
public:
    Circle(Point const & center, double diameter, Fill const & fill,
        Stroke const & stroke = Stroke())
    : Shape(fill, stroke), m_center(center), m_radius(diameter / 2) { }
// ...
private:
    Point m_center;
    double m_radius;
};


Рейтинг:
0

Richard MacCutchan

Посмотрите на определение конструктора

Circle(Point const & center, double diameter, Fill const & fill,
	Stroke const & stroke = Stroke())

он показывает параметры, которые вы должны предоставить:
1. а Point переменная, определяющая центр окружности.
2. а double значение, определяющее диаметр.
3 а Fill объект (понятия не имею, что это такое, возможно, цвет).
4. необязательный Stroke переменная (опять же я не знаю, что это такое).