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

Конструктор копирования - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нужен урок по одномерном и двумерному динамическому массиву http://www.cyberforum.ru/cpp-beginners/thread763678.html
Нужен урок по одномерном и двумерному динамическому массиву
C++ Вводятся два комплексных числа в алгебраической форме. Написать функцию, которая вычисляет произведение двух введённых комплексных чисел и выводит рез Вводятся два комплексных числа в алгебраической форме. Написать функцию, которая вычисляет произведение двух введённых комплексных чисел и выводит результат в алгебраической форме http://www.cyberforum.ru/cpp-beginners/thread763676.html
Написать функцию для решения квадратного уравнения. Параметрами функции должны являться значения коэффициентов и корни уравнения, если они есть C++
Написать функцию для решения квадратного уравнения. Параметрами функции должны являться значения коэффициентов и корни уравнения, если они есть.
C++ Как программно различать число целое и с плавающей точкой
Привет :) Недавно решал задачу и там нужно было находить корни элементов массива и если корень целый то инкрементировать переменную. Я начал решать эту задачу и понял что не знаю как различать числа целые от плавающей точки. Кидаю пример: for(int i = 0; i < size; i++) { if(sqrt(massive)==/*целому числу*/) //как программно различать целые и дробные числа //так как корень из 5...
C++ Сделать кубики чтоб показывало значение числами http://www.cyberforum.ru/cpp-beginners/thread763668.html
Памогите дальши сделать не пойму как ! #include <iostream> #include <windows.h> #include <stdio.h> #include <string.h> #include <conio.h> #include <math.h> #include <string>
C++ Счетчик английского трехсимвольного алфавита Здравствуйте, есть задачка в которой нужен счетчик трехсимвольного английского алфавита a,b,c. При чем длина этого счетчика из символов меняется от 6 до 12, то есть цикл должен пройти раз когда длина счетчика равна 6, далее цикл начинается сначала, но теперь уже длина равна 7, и так до 12. Ясно что 12 вложеных циклов создавать глупо, а как решить по другому моих знаний просто пока не хватает)=.... подробнее

Показать сообщение отдельно
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
16.01.2013, 22:21  [ТС]     Конструктор копирования
Попробуйте сами, если есть время.
Дебагер в DevCPP не работает у меня (или я не понимаю как), а компилятор VS 2010/2012 не компилит, выдает стремные ошибки какие-то, в прошлый раз только снос винды помог ((.

Цитата Сообщение от DU Посмотреть сообщение
почему у вас конструктор копирования и оператор = принимают объект по константной ссылке, а оператор минус - нет?
потому что DevCPP жаловался на строку с прототипом оператор-, я не понял на что именно, убрал const. Потом понял, что devcpp не разрешает послать в функцию-член 2 параметра и просто забыл вернуть на место. Вернул. Спасибо.

Вкладываю код.
header.h
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
#pragma once
 
class String {
public:
    char *Data;
};
 
class TenString:  private String{
    int a;
public:
       
       TenString();
       TenString(char *);
       TenString(const TenString &);
       ~TenString();
       
       // methods
       void ShowData();
       bool isDigital();
       bool comparing(char);
       int toInt(char *);
       char* toString(int); 
       
       TenString& operator= (const TenString &);
       TenString operator- (const TenString & _r_oper);
};
header.cpp
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "header.h"
 
#include <iostream>
using namespace std;
#include <stdio.h>
 
TenString::TenString() {
    Data = new char[2];
    strcpy(Data, "0\0");
}
TenString::TenString(char *_Data) {
    Data = new char[strlen(_Data)+1]; 
    strcpy(Data, _Data);
    if(isDigital()) {
        if(_Data[0] == 45 || _Data[0] == 43) {
            delete [] Data;
            Data = new char[strlen(_Data)+1];
            strcpy(Data, _Data);
        } else {
            delete [] Data;
            Data = new char[strlen(_Data)+2];
            strcpy(Data, "+");
            strcat(Data, _Data);    
        }
    } else {
        delete [] Data;
        Data = new char[2];
        strcpy(Data, "0\0");            
    }
}
TenString::TenString(const TenString &_object) {
    Data = new char[strlen(_object.Data)+1];
    strcpy(Data, _object.Data);
}
TenString::~TenString() {
    delete [] Data;
}
void TenString::ShowData() {
    int digit = toInt(Data);
    strcpy(Data, toString(digit));
    cout << Data; 
}
bool TenString::comparing(char symbol) {
      int i = 48;
      bool result = false;
      for(int i = 48; i < 58; i++) {
              if(i == symbol) 
                   result = true;
      }
      return result;
}
bool TenString::isDigital() {
    bool result, test_1, test_2;
    int i = 1;
    if(Data[0] == 43 || Data[0] == 45 || comparing(Data[0])) {
        test_1 = true;
    }
    while(comparing(Data[i]) && i < strlen(Data)+1) {
        i++;
    }   
    if(i == strlen(Data)) {
        test_2 = true;
    }
    /*  debug
    if(test_1) {
        printf("test 1 passed\n");
    } else {
        printf("test 1 not passed\n");
    }   
    if(test_2) {
        printf("test 2 passed\n");
    } else {
        printf("test 2 not passed\n");
    }
    */
    result = test_1 * test_2;
    return result;
}
 
char* TenString::toString(int _number) {
    char result[255];
    return (itoa(_number, result, 10));
}
 
int TenString::toInt(char *_string) {
    return atoi(_string);
}
 
TenString& TenString::operator=(const TenString &_r_oper) {
    if (this == &_r_oper) {
        return *this;
    }
    delete [] Data;
    Data = new char[strlen(_r_oper.Data)+1];
    strcpy(Data, _r_oper.Data);          
} 
 
TenString TenString:: operator- (const TenString & _r_oper) {
    int data;
    data = toInt(Data) - toInt (_r_oper.Data);
    cout << endl << "Debug: " << data << endl;
    return TenString(toString(data)); 
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
#include "header.h"
 
int main(int argc, char *argv[])
{
    TenString Bob("5555");
    TenString Private("5554");
    TenString Result;
    (Bob - Private).ShowData();
    system("PAUSE");
    
    return EXIT_SUCCESS;
}
Добавлено через 59 секунд
Вообще просмотрите конструкторы/деструкторы.
В соседней теме меня пилили по поводу того, что я везде подсчитываю размер и выделяю строкам только такое кол-во памяти. Этого делать не нужно? Я что-то делаю не так?
В общем просмотрите, если не сложно. Нужно мнение опытного дядьки
 
Текущее время: 22:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru