Форум программистов, компьютерный форум CyberForum.ru

оператор присваивания - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ матрица http://www.cyberforum.ru/cpp-beginners/thread175171.html
Дана целочисленная прямоугольная матрица.Определить: 1)Количество строк ,не содержащих ни одного нулевого элемента. 2) Максимальное из чисел, встречающихся в заданной матрице более одного раза
C++ последовательность из 10 случайных чисел Написать программу которая генерирует последовательность из 10 случайных чисел, в диапозоне от 1 до 10. Выводит эти чисола на экран и вычисляет их среденее арифметическое. #include <iostream> #include <cstdlib> #include <ctime> using namespace std; void main() { http://www.cyberforum.ru/cpp-beginners/thread175159.html
C++ определить положение точки как это сделать?
Дали задание и совсем не представляю как его делать, может кто нибудь подскажет или направит с чего начать... Вот задание:определить положение точки M(x,y) относительно заштрихованной фигуры
C++ Умножение матриц
Вычислить: q = min(2*MA*MB) где MA, MB – матрицы размером N1xN2. Числа N1 и N2 задаются пользователем в начале работы программы. Все элементы матриц заполнить случайными целыми числами в диапазоне . Программу напишите пожалуйста как можно проще.
C++ поиск корня методом касательных http://www.cyberforum.ru/cpp-beginners/thread175136.html
Задача: найти корень уравнения, используя метод касательных. Точность e=0.0001 (в принципе она не нужна, так как я ввожу ее самостоятельно); x принадлежит промежутку (те a и b, тоже ввожу их самостоятельно). Вроде алгоритм правильный, но сумма - нуль и колоссальное число итераций n Код: // óòî÷íåíèå êîðíåé ìåòîäîì êàñàòåëüíûõ. #include <conio.h> #include <stdio.h> #include <cmath> using...
C++ классы нужно разобратся с перегрузками и класами задача для класса А, компонентай-данным которого является пара целых чисел, создать несколько обьектов(например, A a(1,3), b(3,1)). реализовать для обьектов данного класса перегрузку операции += (a+=b) используя внешнюю по отнашению к классу функцию перегрузки. если можно, нужен исходник по проще, и с коментариями. через неделю здавать а нифига в этом... подробнее

Показать сообщение отдельно
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
11.10.2010, 21:10     оператор присваивания
Привет всем !
Каким образом вызывается оператор присваивания, например, здесь:
Код
a = "I ";
если в аргументе char*, а в операторе присваивания const String&.
Может быть дело в operator char*(), но в ответе operator char() вызывается после присваивания:

Компилятор выводит :
Vizivaetsja operator prisvaivanija
Vizivaetsja operator prisvaivanija
Vizivaetsja operator prisvaivanija
Vizvalsja operator char*
...
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "stdafx.h"
#include "conio.h"
#include <string.h>
using namespace std;
int a;
class String {
private:
    char* ptr;
public:
    String(){
        ptr = new char[1];
        ptr[0] = '\0';
    }
    String(char* s){
            int n = strlen(s);
            ptr = new char[n + 1];
            strcpy(ptr, s);
    }
    String(const String& src){
            int n = strlen(src.ptr);
            ptr = new char[n + 1];
            strcpy(ptr, src.ptr);
    }
 
    ~String(){
            delete [] ptr;
    }
 
    String& operator=(const String& src){
        cout << "Vizivaetsja operator prisvaivanija" << endl;
        cpy(src.ptr); 
        return *this;
    }
 
 
 
    String operator+(char* s){
        String new_str(ptr);
            cout << "S = " << s << endl;
            cout << "new_str.ptr = " << new_str.ptr << endl;
            cout << "ptr = " << ptr << endl;
            new_str.cat(s);
            return new_str;
    }
    operator char*() {
        cout << "vizvalsja operator char*" << endl;
        cout << "ptr = " << ptr << endl;
        return ptr;
    }
    void cat(char* s){
            int n = strlen(ptr) + strlen(s);
            cout <<".......... " << ptr << endl;
            cout <<".......... " << s << endl;
            char* p1 = new char[n + 1];
            strcpy(p1, ptr);
            strcat(p1, s);
            delete [] ptr;
            ptr = p1;
    }
    void cpy(char* s){
        delete [] ptr;
        int n = strlen(s);
        ptr = new char[n + 1];
        strcpy(ptr, s);
    }
};
 
int main() {
    String a, b, c;
    a = "I ";
    b = "am ";
    c = "so ";
    String d = a + b;
    cout << d << endl;
    return 0;}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru