Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/89: Рейтинг темы: голосов - 89, средняя оценка - 4.98
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
1

Функция, возвращающая объект класса

03.06.2015, 09:18. Показов 16877. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Visual c++

Visual Studio 2010

Есть задание, в котором, нужно создать класс и некоторые методы. Я создал public ref class.

Все необходимые требования по заданию выполнить удалось, но столкнулся с проблемой. Последнее задание: нужно реализовать объединение двух объектов этого класса по определённому алгоритму. Алгоритм не сложный, у меня проблема в другом:

Насколько я понимаю, нужно создать метод, который принимает в качестве параметра объект этого класса. Далее в этом методе создаётся новый объект этого класса, производим объединение по заданному алгоритму и возвращаем этот класс. Но у меня не получается описать метод, который бы возвращал объект заданного класса. Постоянно ошибки. Как правильно описать метод, который возвращает объект этого класса?

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2015, 09:18
Ответы с готовыми решениями:

Функция, возвращающая объект класса
Всем доброго времени суток. Хотел бы узнать правильное описание функции возвращающей объект...

Рекурсивная функция, возвращающая указатель на объект
Есть рекурсивная функция (заполняющая двоичное дерево) Node* fill(int i){ //Возвращаемое...

Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел
Разработать заданные согласно условия функции и сделать в главной программе по два вызова этих...

Функция, возвращающая экземпляр класса
Доброго времени суток. Допустим есть у нас функция, результатом которой является некий объект: ...

15
15 / 15 / 4
Регистрация: 11.11.2014
Сообщений: 122
03.06.2015, 09:30 2
Организуй возврат по значению, а не по ссылке.
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
03.06.2015, 20:36  [ТС] 3
Я делаю так. Например имя класса class1

В хидере пишу
C++
1
class1 sum(class1 r);
В cpp пишу
C++
1
2
3
4
5
class1 class1::sum(class1 r){
class1 obj;
//Тело метода
return obj;
}
Но это не работает.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
03.06.2015, 21:16 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class A
{
    int x;
    int y;
public:
    A(int a = 0, int b = 0) : x(a), y(b)
    {}
    A sum(A a)
    {
       return A(x + a.x, y + a.y);
    }
};
 
 
int main()
{
    
    A a(1, 2);
    A b(3, 4);
    A c = a.sum(b);
    
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Но метод, по моему, тут не очень подходит. Лучше дружественную функцию (или оператор), которая принимает два объекта.
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
03.06.2015, 21:17  [ТС] 5
А вот это конструктор?
C++
1
2
    A(int a = 0, int b = 0) : x(a), y(b)
    {}
А я ни одного конструктора не писал, он значит какой-то по умолчанию подставляет?
Может быть из-за этого ошибка. Остальное вроде по сути тоже самое пишу.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
03.06.2015, 21:54 6
Цитата Сообщение от dima-dima Посмотреть сообщение
он значит какой-то по умолчанию подставляет?
Да.

Добавлено через 1 минуту
Цитата Сообщение от dima-dima Посмотреть сообщение
Остальное вроде по сути тоже самое пишу.
Только ты это видишь.
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
04.06.2015, 22:40  [ТС] 7
Вот что есть в хидере

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef A_H
#define A_H
using namespace System::Collections;
using namespace System;
 
 
  ref class A
  {
  public:
//тоже методы поля
A sum(A obj);//вот этот метод
  private:
//здесь методы, поля
 
  };
 
#endif
И соответствующая cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include "A.h" //Подключаем заголовочный файл с интерфейсом
#include <iostream> 
#include <string> 
 
using namespace System;
using namespace std;
 
 
//Тут методы
 
A A::sum(A obj){
A ob;
//Тут что-то делаем
return ob;
}

Вот такая ошибка
error C2440: return: невозможно преобразовать "A" в "A"

Как её исправить, не понимаю.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
04.06.2015, 22:57 8
Цитата Сообщение от dima-dima Посмотреть сообщение
ref class A
Что за ref? Это, вообще, какой язык?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
04.06.2015, 23:04 9
Вот код и результат компиляции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream> 
#include <string> 
using namespace std;
 
class A
{
  public:
//тоже методы поля
    A sum(A obj);//вот этот метод
  private:
//здесь методы, поля
 
};
 
//Тут методы
 
A A::sum(A obj)
{
A ob;
//Тут что-то делаем
return ob;
}
 
 
int main()
{
    
    system("pause");
    return 0;
}
Миниатюры
Функция, возвращающая объект класса  
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
04.06.2015, 23:46  [ТС] 10
Это visual c++ в студии 2010.
Есть там такое, ref.
И оно мне обязательно нужно. И мне нужно, что бы при таком условии можно было создать метод, возвращающий этот же класс.

Добавлено через 5 минут
Я использую в классе массив типа:
array<t_item>
и строку String, а они требуют, что бы класс был ref
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
04.06.2015, 23:50 11
Цитата Сообщение от dima-dima Посмотреть сообщение
Это visual c++ в студии 2010.
Есть там такое, ref.
В студии много что есть. Язык какой? С++? В С++ нет ни ref, ни System.

Добавлено через 2 минуты
Если это C++/CLI, то тебе сюда: https://www.cyberforum.ru/cpp-cli/
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
04.06.2015, 23:52  [ТС] 12
Язык 100% С++
В студии выбираю создать проект, выбираю Visual C++, создать консольное приложение CLR.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
04.06.2015, 23:55 13
Цитата Сообщение от dima-dima Посмотреть сообщение
создать консольное приложение CLR.
Это другой язык, не С++.
Ещё раз:
Цитата Сообщение от lss Посмотреть сообщение
В С++ нет ни ref, ни System
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
04.06.2015, 23:57  [ТС] 14
Хорошо, как называется этот язык и как создать консольный проект в десятой студии, что бы язык был С++?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
04.06.2015, 23:59 15
Цитата Сообщение от dima-dima Посмотреть сообщение
Хорошо, как называется этот язык
Посты читаешь?
Цитата Сообщение от lss Посмотреть сообщение
Если это C++/CLI, то тебе сюда: https://www.cyberforum.ru/cpp-cli/
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
05.06.2015, 00:01  [ТС] 16
Я читал этот пост. И он явно не указывал на то, что "C++/CLI" - это язык, который используется в созданном мною проекте.
Буду знать.
0
05.06.2015, 00:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2015, 00:01
Помогаю со студенческими работами здесь

Функция шаблонного класса возвращающая тип, определенный классом
ошибка. говорит, что не ожидал увидеть идентификатор some(C2061)template&lt;typename T&gt; class a{...

Функция, принимающая объект импортируемого класса из библиотеки динамической компоновки
Здравствуйте. Возникла следующая проблема: Есть библиотека, экспортирующая класс. Есть...

Функция, возвращающая константу
Почему добавление спецификатора const ничего не меняет? const int f(int a) { return a; }...

Функция, возвращающая vector
Решил реализовать шарповскую String.Split(). Она должна возвращать vector&lt;string&gt;, следовательно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru