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

При переходе из метода в главную функцию теряется информация - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поиск тестовых файлов http://www.cyberforum.ru/cpp-beginners/thread794305.html
Возник такой вопрос: можно ли написать программу, которая будет искать в папке текстовые файлы и выводить их названия на экран. Если можно, то как?
C++ Обсудим наследование в C++? Приветы Размышления о практической применимости и деталях различных вариаций наследования натолкнули на следующие вопросы. 1. Виртуальное наследование. Верно ли следующее суждение: единственная цель использования виртуального наследования - избежать неопределенности, возникающей в ромбовидных иерархиях? Гуглing на эту тему приводит меня к статьям/блогам/прочей ерунде, где авторы, будто... http://www.cyberforum.ru/cpp-beginners/thread794297.html
C++ Сделать четные биты равными нечетным и наоборот
нужна помощь с задачей. Используя битовые операций в числе типа unsigned int сделать так, чтобы четные биты стали равны нечетным, а нечетные четным.
C++ Не компилируется старая программа
Здравствуйте. У меня появилась проблема с запуском старой программы на С++ XE2 которая была написана на С++ XE1. При компилирование выкидывает ошибку Fatal: Unable to open file 'RAVE90VCL.LIB'. Скорей всего эта ошибка возникает и за того, что в XE2 встроен Rave Reports версии 10, а в XE1 Rave Reports версии 9. Я использовал этот компонент для создания отчётов, но вот не подумал, что новая версия...
C++ с++ двумерный массив http://www.cyberforum.ru/cpp-beginners/thread794270.html
уважаемые программисты прошу помочь с программой на двумерный массив т.к. я не в силах это сделать!!! нужно создать функцию к этой программе: #include<iostream.h> #include<math.h> void main() { int i,j,c; int a; for(i = 0; i < 3; i++) {
C++ Из заданного множества точек на плоскости выбрать три разные точки A, B, C Из заданного множества точек на плоскости выбрать три разные точки A, B, C, так, чтобы внутри треугольника ABC содержалось максимальное количество точек этого множества. Помогите решить, пожалуйста. подробнее

Показать сообщение отдельно
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
25.02.2013, 17:03     При переходе из метода в главную функцию теряется информация
В общем, вот в чем вторая беда была: нет конструктора копирования. Это значит - создан будет компилятором. Реализация устроена так, что присваивание побитовое - при копировании одного объекта в другой адреса просто присваивались друг другу.

ПРАВИЛА:
Если твой класс выделяет память посредством new, ВСЕГДА переопределяй конструктор копирования и оператор присваивания.
Ниже рабочий код. Немножко поправил его.

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include "stdafx.h"
#ifndef _ARRAY_
#define _ARRAY_
#include <iostream>
using namespace std;
 
class ar {
    unsigned size;
    int * a;
public:
    unsigned GetN()
    {
        return size;
    }
    ~ar()
    {
        delete []a;
    }
    ar  (unsigned n): size(n)
    {
        a=new int[size];        
    }
    ar (): a(0)
    {
        size=5;
        a=new int[size];        
    }
 
    // КОНСТРУКТОР КОПИРОВАНИЯ!!!
    ar(const ar& arg)
    {
        size = arg.size;
        a = new int[size];
 
        for (int i=0;i<size;i++)
            a[i]=arg.a[i];
    }
 
    ar& operator =(const ar &);
 
    // ПЕРЕГРУЗКА ДЛЯ ЧТЕНИЯ/ЗАПИСИ
    int& operator [](int i);
    const int& operator [](int i)const;
    ar operator + (const ar &p)const;
    ar operator * (const int & p);
    bool operator == (const ar & p);
    friend istream& operator >>(istream & is, ar & a);
    friend ostream& operator << (ostream & os, const ar & a);
};
#endif 
 
ar& ar::operator =(const ar & p)
{
    if (size!=p.size)
        throw "can't do this";
 
    if(this == &p)  // ПРОВЕРКА НА ПРИСВАИВАНИЕ САМОМУ СЕБЕ
        return *this;
 
    for (int i=0;i<size;i++)
        a[i]=p.a[i];
    
    return *this;
}
 
int& ar::operator [](int i)
{
    return a[i];
}
 
const int& ar::operator [](int i) const 
{
    return a[i];
}
 
// ВОЗВРАЩЕНИЕ ПО ЗНАЧЕНИЮ В ЭТИХ 2 ОПЕРАТОРАХ
ar ar::operator + (const ar & p) const
{
    ar res;
    if (size!=p.size)
        throw "can't plus";
    for (int i=0;i<size;i++)
        res.a[i]=a[i]+p.a[i];
    return res;
}
ar ar::operator * (const int & n)
{
    ar res;
    for (int i=0;i<size;i++)
        res.a[i]=a[i]*n;
    return res;
}
bool ar::operator == (const ar & p)
{
    if (size!=p.size)
        return false;
    for (int i=0;i<size;i++)
        if (a[i]!=p.a[i])
            return false;
    return true;
}
istream& operator >> (istream & is, ar & a)
{
    cout<<"input members of the array"<<endl;
    for (int i=0;i<a.size;i++)
        cin>>a.a[i];
    return is;
}
ostream& operator << (ostream & os, const ar & a)
{
    for (int i=0;i<a.size;i++)
        cout<<a.a[i]<<" ";
    cout<<endl;
    return os;
}
 
int main()
{
    try {
    ar a;
    cin>>a;
    ar b;
    cin>>b;
    cout<<a<<endl;
    cout<<b<<endl;
    ar c;
    //c=a+b;
    c=a;
    cout<<c<<endl;
    if (a==b)
        cout<<"a==b"<<endl;
    else cout<<"a!=b"<<endl;
    b=a*3;
    cout<<b;
    cout<<a;
    }
    catch (char *s)
    {
        cout<<s<<endl;
    }
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru