Помогите создать свой тип данных с использованием перегрузки. Я пытался сделать следующее:
class dot
{
float *a1, *a2;
dot()
{
a1 = new float;
a2 = new float;
}
void operator = (const float *znach)
{
*a1 = *znach;
*a2 = *(znach + 1);
cout << " a = " << *a1 << " b = " << *a2 << endl;
}
~dot()
{
delete a1;
delete a2;
}
};
Где dot точка пространства. Как мне ввести туда две координаты x,y? Как вообще использовать перегрузки при создании своего типа? Зачем нужен typdef? Как его использовать?
Для такого простого класса, который хранит обьекты встроенных типов, не стоит хранить указатели, таким образом усложняя код и повышая риск ошибки. Его можно написать так:
#include <iostream>
using namespace std;
class Dot {
float a1, a2;
public:
Dot(float k1 = 0.0, float k2 = 0.0)
:a1(k1), a2(k2) {}
void setData(const float k1, const float k2 = 0.0)
{ a1 = k1; a2 = k2; }
float first() const { return a1; }
float second() const { return a2; }
//...
};
int main()
{
// создать обьект с данными(координатами) и показать их
Dot d(2.2, 3.3);
cout << d.first() << ", " << d.second() << endl;
// установить новые данные и показать их
d.setData(3.45, 0.34);
cout << d.first() << ", " << d.second() << endl;
// typedef же позволяет получать новые имена типов
typedef std::pair<float, float> dot;
// после этого dot можно использовать как стандартную пару
// проделать то же самое не написав класс
dot xy(2.2, 3.3);
cout << xy.first <<", " << xy.second << endl;
xy = std::make_pair(3.45, 0.34);
cout << xy.first << ", " <<xy.second;
return 0;
}
Вы создали оператор равенства, который считывает из памяти два рядом расположенные объекта памяти типа float. Забыли методы расположить для внешнего использовании с помощью декларации public:.
# include <iostream>
using namespace std ;
class dot
{
float *a1, *a2;
public:
dot()
{
a1 = new float;
a2 = new float;
}
void operator = (const float *znach)
{
*a1 = *znach;
*a2 = *(znach + 1);
cout << " a = " << *a1 << " b = " << *a2 << endl;
}
~dot()
{
delete a1;
delete a2;
}
};
int main(){
float memory[]={1,2,3,4};
dot x;
x= memory;
dot y;
y = memory+2;
}
Так должно работать.
> g++ dot.cpp
> ./a.out
a = 1 b = 2
a = 3 b = 4
Для удобства нужно создать метод
void SetXY(float x,float y){
*a1 = x;
*a2 = y; }
тогда можно использовать так:
dot d;
float x=5;
float y=6;
d.SetXY(x,y);
Перегрузка это большая тема. Конструируете новый объект, который использует все переменные класса dot. В новом классе вы можете добавить переменные дополнительные, добавить/переделать методы. Только переделать методы в обязательном порядке конструктор, деструктор, оператор равенства. Почитайте сначала теорию, и попробуйте. Если что не выходит выкладываете сюда.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости