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

Отличие объявления, определения и инициализации - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ разбор задачки. системы счисления http://www.cyberforum.ru/cpp-beginners/thread912907.html
перевод числа из произвольной системы в десятичную..сам код программы не мой.. дали для примера чтоб свои части программы делали в этой же проге. но запускаю данную допустим для числа E8.2 14cc и выдает ошибку- некорректный ввод данных.а для D8.2 например, решается. Как понимаю что ктото неправильно значения для них выставил,E считается как 15 или строго больше 14 а не равно 14 как должно быть в...
C++ для данного натурального n и действительного x подсчитать следующие суммы для данного натурального n и действительного x подсчитать следующие суммы S=cos1-cos2+cos-...+(-1)^n+1cosn http://www.cyberforum.ru/cpp-beginners/thread912900.html
Вывести на экран числа ввиде следующей таблицы C++
Вывести на экран числа ввиде следующей таблицы 6 6 6 6 6 7 7 7 7 8 8 8 9 9 10
C++ рассчет пенсии
Доброго времени суток! Помогите пожалуйста с написанием программы. Идея такая что женщинам которым меньше 40, зарплата 200 лат мужчинам которым меньше 25 , 400 лат мужчинам от 25 до 39, 200 лат остальным которым 40 и больше, 300 лат.
C++ Создание программы для сортировки случайного массива чисел http://www.cyberforum.ru/cpp-beginners/thread912877.html
Здравствуйте, пишу курсовую работу, по заданию требуется написать программу, в которой пользователь задает размер строк и столбцов массива одним числом, тоесть 2=2 строки*2 столбца, 10=10 строк*10 столбцов, программа генерирует случайный массив и потом сортирует его строки от меньшего числа к большему. в итоге должно получится программа: пользователь ввел число, программа сгененрировала массив,...
C++ __property Видел __property в C++ Builder и в C#.Используется в классе вот так: __property int IntegerValue = {read = GetValue,write = SetValue}; Как использовать это в C++? подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
27.06.2013, 17:43
Цитата Сообщение от Croessmah Посмотреть сообщение
Неверная инициализация данных - один из плодородных источников ошибок в программировании.
Это правда. Тем не менее может же быть случай когда переменная должна быть объявлена и не может быть проинициализирована полностью. Например если классы связны указателями друг на друга.
Новичку это ненужно. :
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
#include <iostream>
#include <string>
#include <typeinfo.h>
using namespace std;
class A {
int a;
double b;
string c;
public:
    A()
        :a(1), b(2.0), c("a anb b were sitting on a pipe")  
    {}
A(int a_)//частично инициализирует
:a(a_)
{}
A(double b_)//частично инициализирует
:b(b_)
{}
A(string c_)//частично инициализирует
:c(c_)
{}
A(const A& orig)//копирующий (и полностью инициализирующий)
:a(orig.a), b(orig.b), c(orig.c)
{}
    int& propertyA(){
return a;
}
    double& propertyB(){
return b;
}
string& propertyC(){
return c;
}
};
int main()
 {
     A *b=new A;//динамическая память выделена но не инициализирована
     cout<<b->propertyA()<<endl;//мусор если конструктор по умолчанию (без параметров) закоментирован
 
     A a;//память на стеке выделена
     cout<<a.propertyA()<<endl;////мусор если конструктор закоментирован
     a.propertyA()=2;// заполняется простым присваиванием
     a.propertyB()=5.0;// заполняется простым присваиванием
     a.propertyC()="a+b= ";// заполняется простым присваиванием
     
     cout<<a.propertyA()<<endl;
     cout<<a.propertyB()<<endl;
     cout<<a.propertyC()<<a.propertyA()+a.propertyB()<<endl;
 
     A c(a);//A c = a; - аналогично, полноценность инициализации определяется полноценность конструктора копии
 
     cout<<c.propertyA()<<endl;
     cout<<c.propertyB()<<endl;
     cout<<c.propertyC()<<a.propertyA()+a.propertyB()<<endl;
 
     A d = "Oi scolco musora budet esli razremite stroki nige...";//работает конструктор преобразования принимающий строку
     //остальные поля не инициализированы
     //отложенную, частичную инициализацию можно использовать для связывания двух экземпляров классов, когда
     //один из них обявлен опережающим объявлением, но не может быть полностью инициализирован без указателя на
     //второй, а второму для создания экземпляра нужен указатель на первый
     //такую штуку (создание пары связянных объектов разных классов можно описать в глобальном или статическом методе
     //или написать для этого отдельный класс.
     cout<<d.propertyC()<<endl;
     //cout<<d.propertyA()<<endl;
     //cout<<d.propertyB()<<endl;
     system("pause");
     }
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru