Форум программистов, компьютерный форум 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, 19:50     Конструктор копирования
Привет
Подскажите пожалуйста, как правильно сделать конструктор копирования.

Заголовки:
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 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- (TenString & _r_oper);
};
Конструктор копии:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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");            
    }
}
Почему так мудрено :
в задаче нужно создать десятичную строку. то есть строку, в которой содержаться только числа. знаковые.
то есть на первом месте может быть +, - или ничего не стоит, просто цифра.
Скажите, будет ли этот конструктор работать правильно?
Ну и предвещая ответ.
Как исправить?
+ не работает в одном пункте.
при пегрузке оператора +.
C++
1
2
3
4
5
6
TenString TenString:: operator- (TenString & _r_oper) {
    int data;
    data = toInt(Data) - toInt (_r_oper.Data);
    cout << endl << "Debug: " << data << endl;
    return TenString(toString(data)); 
}
data выводит правильное, но результат (содержимое получившегося после сложения класса 0)

C++
1
2
3
4
5
6
7
8
9
10
int main(int argc, char *argv[])
{
    TenString Bob("5555");
    TenString Private("5554");
    TenString Result;
    (Bob - Private).ShowData();
    system("PAUSE");
    
    return EXIT_SUCCESS;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru