Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
11 / 11 / 7
Регистрация: 23.12.2009
Сообщений: 300

operator=

13.10.2011, 13:00. Показов 1195. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
class mnogo4len
{
    protected:
        int *N;                 
        float *koef;                
    public:
        mnogo4len();                             //конструктор
        mnogo4len(int);                         //конструктор по параметру (N)
        mnogo4len(mnogo4len &);                                //копирующий конструктор
        ~mnogo4len();                                         //деструктор
        mnogo4len operator=(mnogo4len &);            //операция присвоения
 
};
 
void main()
{
...
}
 
mnogo4len mnogo4len::operator=(mnogo4len &M)  //операция присвоения
{
    if(this==&M) return this;
    N=M.N;
    delete[] koef;
    koef = new float[N];
    for(int i=0;i<N;i++) koef[i]=M.koef[i];
    return M;
}
1) операция присвоения не работает, пишет ошибку:
[BCC32 Error] File2.cpp(66): E2316 'operator mnogo4len::=(mnogo4len &)' is not a member of 'mnogo4len
что сделано не так?
2) когда нужно писать перед перегруженной операцией слово friend?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.10.2011, 13:00
Ответы с готовыми решениями:

E2459 VCL style classes must be constructed using operator new
TRegExpr Re(&quot;&lt;span&gt;(.*?){1}&lt;/span&gt;&quot;); Ругается на данную строчку, код ошибки: E2459 VCL style classes must be constructed using...

Ошибка E2044 - operator delete must return void
Среда - С++ Builder 2006 Суть такова: Только начали изучать сишку. Выполняю домашку, нужно составить форму с кнопкой и вычисляемым...

Ошибка: E2459 VCL style classes must be constructed using operator new
Программа выводит красную точку, которой можно управлять с клавиатуры.Здесь основная проблема в этой строке ...

5
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
13.10.2011, 19:18
Устраненные ошибки:
1) Так как N это размер массива,и у вас он мистическим образом объявлен как указатель , а new float[...] принимает unsigned int (беззнаковое целое) то лучше объявить его как unsigned int, а не как указатель на int
2) Operator= принимать и возвращать должен адрес переменной!
Ну если уж возвращаете значение переменной то возвращать нужно значение хранящеяся по адресу this. Вот так: *this

Вот рабочий вариант вашего класса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class mnogo4len
{
        protected:
                int N;
                float *koef;
        public:
                mnogo4len();                                                    
                mnogo4len(int);                                                 
                mnogo4len(mnogo4len &);                                    
                ~mnogo4len();                                                 
                mnogo4len operator=(mnogo4len &);                   
 
};
mnogo4len mnogo4len::operator=(mnogo4len &M)  
{
        if(this == &M) return *this;
        N=M.N;
        delete[] koef;
        koef = new float[N];
        for(int i=0;i<N;i++) koef[i]=M.koef[i];
        return M;
}
2)
Ключевое слово friend – спецификатор функции, который дает функции – не члену класса доступ к скрытым членам класса. Он используется для того, чтобы выйти за строгие рамки типизации и сокрытия данных в C++. Однако, должны быть весьма серьезные причины для выхода за пределы этих ограничений, поскольку от них зависит надежность программирования. Поэтому использование friend функций в языке C++ спорно.
Одна из причин их использования состоит в том, что некоторые функции нуждаются в привилегированном доступе более, чем к одному классу. Вторая причина – friend-функция передает все параметры через список параметров, и значение каждого из них подчинено преобразованию, совместимому с назначением. Такие преобразования применяются к явно переданным аргументам-классам и поэтому особенно полезны в случаях перегрузки оператора. Это будет показано в следующем разделе.

Объявление friend (дружественной) функции должно появляться внутри объявления класса, которому она дружественна. Имени функции предшествует ключевое слово friend, и ее объявление может находится как в public, так и в private части класса, что не повлияет на значение. Функция-член одного класса может быть friend-функцией другого класса. Это происходит тогда, когда функция-член объявлена в friend классе с использованием оператора разрешения контекста для определения имени функции дружественного класса.
1
11 / 11 / 7
Регистрация: 23.12.2009
Сообщений: 300
13.10.2011, 19:32  [ТС]
Цитата Сообщение от __bool Посмотреть сообщение
он мистическим образом объявлен как указатель
почему его лучше объявить как обычную переменную?
0
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
13.10.2011, 19:39
Цитата Сообщение от Hovercat Посмотреть сообщение
почему его лучше объявить как обычную переменную?
1) Все что созданно оператором new нужно удалять с помощью delete, иначе утечка памяти.
2) Конкретно в вашей задаче вы не получаете никакой выгоды от использования укзателя.

Ну а чтоб понять смысл и принцип работы указателей и динамической памяти Google в помощь!
0
11 / 11 / 7
Регистрация: 23.12.2009
Сообщений: 300
13.10.2011, 19:45  [ТС]
вот я и спрашивал как сделать N когда динамическая переменная
0
 Аватар для __bool
288 / 229 / 27
Регистрация: 13.06.2010
Сообщений: 744
13.10.2011, 20:18
Цитата Сообщение от Hovercat Посмотреть сообщение
вот я и спрашивал как сделать N когда динамическая переменная
Спросили но не запостили?
Цитата Сообщение от __bool Посмотреть сообщение
значение хранящеяся по адресу this. Вот так: *this
Эквивалентно значение хранящееся по адресу N:
C++
1
*N
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2011, 20:18
Помогаю со студенческими работами здесь

Как исправить ошибку - Could not find a match for 'operator AnsiString::=(TDateTime)'
Организовать хранение данных в файле в следущую структуру, фио, дата, время 1) Написать процедуру считывания этого файла 2) Сколько раз...

[C++ Error] Unit1.cpp(11): E2459 VCL style classes must be constructed using operator new
почему в билдере нельзя объявить обычную переменную TBitmap? Graphics::TBitmap bmp; с указателями все работает: ...

Ошибка [BCC32 Error] vector(1179): E2459 Delphi style classes must be constructed using operator new
Пишу код в RAD XE студии. К сожалению не уверен, что пишу в нужной ветке, т.к. не нашёл отдельной ветки для RAD XE студии, прошу...

Ошибка: 'operator<<' not implemented in type 'istream' for arguments of type 'int'
Создаем самую простую прогу: int sgrt(int); #pragma argsused int main(int argc, char* argv) { int a; ...

Ошибка в C++ Builder ( 'operator<<' not implemented in type 'Pages' for arguments of type)
Доброго времени суток! помогите пожалуйста, у меня не выводит из контейнера map. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru