(C++) Присвоение класса внутри его функции
Есть функция:
void someClass::function(someClass newOne)
{
....
someClass newOneFunction = newOne; // простое присвоение переданного класса
someClass newTwoFunction = ??? // как присвоить также класс, от которого вызывалась функция
....
}
Вот ее вызов:
.... someClass test(1, 2, 'c'); someClass testFunction(3, 1, 'o'); test.function(testFunction); ....
Ответ
Praytic, ну тут есть два варианта, либо конструктор копирования, либо метод, который копирует значения в уже существующей.
class SomeClass {
private:
int x, y, z;
public:
// Конструктор копирования
SomeClass(const SomeClass* obj) {
this->Copy(obj);
}
// Копирование
void Copy(const SomeClass* obj) {
this->x = obj->x;
this->y = obj->y;
this->z = obj->z;
}
}Как юзать:
SomeClass obj1 = .... // Конструктор копирования SomeClass obj2(&obj1); // Копирование obj1.Copy(&obj2);
Смотрите также:
Комментарии
- 1 (Текущая страница)
- 2
я, конечно, давным давно ничего не писал на c++, но разве оператор this там не работает?
Да, можно юзать this
class SomeClass {
private:
int x, y, z;
public:
void setX(int x) {
this->x = x;
}
}но мне надо не одно значение класса присваивать, а все разом, как в примере с newOne и newOneFunction
все значения одного класса всем значениям другого
да
Praytic, ну тут есть два варианта, либо конструктор копирования, либо метод, который копирует значения в уже существующей.
class SomeClass {
private:
int x, y, z;
public:
// Конструктор копирования
SomeClass(const SomeClass* obj) {
this->Copy(obj);
}
// Копирование
void Copy(const SomeClass* obj) {
this->x = obj->x;
this->y = obj->y;
this->z = obj->z;
}
}Как юзать:
SomeClass obj1 = .... // Конструктор копирования SomeClass obj2(&obj1); // Копирование obj1.Copy(&obj2);
Спасибо. Кстати, почему нельзя так писать?
// Копирование
void Copy(const SomeClass obj) {
x = obj.x;
y = obj.y;
z = obj.z;
}
Praytic, можно, просто лень было писать дважды. Ну и собственно с указателями нужно их разыменовывать при обращении к методам и полям класса с помощью такого оператора ->
Praytic, можно, просто лень было писать дважды. Ну и собственно с указателями нужно их разыменовывать при обращении к методам и полям класса с помощью такого оператора ->
Что значит писать дважды? Это я просто переписал вашу функцию без использования указателей. По моему мнению она работает точно также (только копию класса создает), но люди по-умнее говорят, что так писать нельзя и нужно по-больше указателей использовать. Почему?
Если тебе нужно создать полный клон по полям, для этого хорошо подходит конструктор копирования по умолчанию - это конструктор копирования который заранее определен для класса.
Он вызывается в двух случаях:
MyClass A(...); My Class B(A);
MyClass A(...); MyClass B = A; //здесь это не операция присваивания, а копирование
- 1 (Текущая страница)
- 2
Возможность добавлять комментарии была ограничена


<a href= http://mosros.flybb.ru/viewtopic.php?f=2&t=635>Процесс получения диплома стоматолога: реально ли это сделать быстро?</a>