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

rtti - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Возможно дело в цикле http://www.cyberforum.ru/cpp-beginners/thread932123.html
Задачка: Программа должна отображать меню из четырех пунктов, каждый из них помечен буквой. Если пользователь вводит букву, отличающуюся от четырех допустимых, программа должна повторно приглашать его ввести правильное значение до тех пор, пока он этого не сделает. с таким вот условием цикл останавливается: while (b != 'c'); а вот с таким, нечего не происходит: using namespace std;
C++ алгоритм accumulate Допустим у меня есть вектор.Мне нужно подсчитать выборочно в нем сумму элементов.Я использую функциональный класс через алгоритм accumulate.А если мне нужно еще как-то подсчитать выборочно сумму элементов,мне нужно создать другой функциональный класс или можно каким-то образом использовать один? http://www.cyberforum.ru/cpp-beginners/thread932111.html
Что такое унифицированное программирование? C++
То есть что такое унификация в целом и что такое унифицированные функции или что там ещё есть? Знаю только, что это как-то связанно с stl.
C++ Почему запись int в файл происходит в обратном порядке?
Разбирался в способе сохранения структур в файле, наткнулся на вот такой пример: int a = 'abcd'; FILE* WriteFile; char WriteFileName = "D:\\filename.txt"; WriteFile = fopen (WriteFileName,"wb"); fwrite(&a, sizeof(int), 1, WriteFile); fclose (WriteFile);
C++ Borland C++3.1 http://www.cyberforum.ru/cpp-beginners/thread932062.html
Этот старый "инструмент" стоит уже давно забыть и перейти в более новый? Вообще искал, описаний про него нет, справка на англ тем более не удобна. Всё равно же в современных редакциях Bilder например(это продолжение этого) усовершенственные библиотеки? Ну в общем у новых намного больше возможностей?!
C++ C++ за 21 день Решил изучить C++, порылся в инете насчёт путных учебников и рекомендовали - "Освой самостоятельно C++ за 21 день, 7-е издание (C++11)". Подскажите, стоит ли брать? Или что-то другое выбрать, а то денег шаром покати. :) подробнее

Показать сообщение отдельно
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
01.08.2013, 18:14     rtti
Есть код:
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
// header.h
#include <stdexcept>
#include <string>
#include <typeinfo>
#include <cstdlib>
 
class Sales
{
protected:
    enum {MONTHS = 12};   
public:
    class bad_index : public std::logic_error
    {
    private:
        int bi;  
    public:
        explicit bad_index(int ix,
            const std::string & s = "Index error in Sales object\n");
        int bi_val() const {return bi;}
        virtual ~bad_index() throw() {}
    };
    explicit Sales(int yy = 0);
    Sales(int yy, const double * gr, int n);
    virtual ~Sales() { }
    int Year() const { return year; }
    virtual double operator[](int i) const;
    virtual double & operator[](int i);
private:
    double gross[MONTHS];
    int year;
};
 
class LabeledSales : public Sales
{
  public:
    class nbad_index : public Sales::bad_index
    {
    private:
        std::string lbl;
    public:
        nbad_index(const std::string & lb, int ix,
           const std::string & s = "Index error in LabeledSales object\n");
        const std::string & label_val() const {return lbl;}
        virtual ~nbad_index() throw() {}
     };
    explicit LabeledSales(const std::string & lb = "none", int yy = 0);
    LabeledSales(const std::string & lb, int yy, const double * gr, int n);
    virtual ~LabeledSales() { }
    const std::string & Label() const {return label;}
    virtual double operator[](int i) const;
    virtual double & operator[](int i);
private:
    std::string label;
};
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
// method.cpp
#include "header.h"
using std::string;
 
Sales::bad_index::bad_index(int ix, const string & s )
    : std::logic_error(s), bi(ix)
{
}
 
Sales::Sales(int yy)
{
    year = yy;
    for (int i = 0; i < MONTHS; ++i)
        gross[i] = 0;
}
 
Sales::Sales(int yy, const double * gr, int n)
{
    year = yy;
    int lim = (n < MONTHS)? n : MONTHS;
    int i;
    for (i = 0; i < lim; ++i)
        gross[i] = gr[i];
    // for i > n and i < MONTHS
    for ( ; i < MONTHS; ++i)
        gross[i] = 0;
}
 
double Sales::operator[](int i) const
{
    if(i < 0 || i >= MONTHS)
        throw bad_index(i);
    return gross[i];
}
 
double & Sales::operator[](int i)
{
    if(i < 0 || i >= MONTHS)
        throw bad_index(i);
    return gross[i];
}
 
LabeledSales::nbad_index::nbad_index(const string & lb, int ix,
           const string & s ) : Sales::bad_index(ix, s)
{
    lbl = lb;
}
 
LabeledSales::LabeledSales(const string & lb, int yy)
         : Sales(yy)
{
    label = lb;
}
 
LabeledSales::LabeledSales(const string & lb, int yy, const double * gr, int n)
        : Sales(yy, gr, n)
{
    label = lb;
}
 
double LabeledSales::operator[](int i) const
{    if(i < 0 || i >= MONTHS)
        throw nbad_index(Label(), i);
    return Sales::operator[](i);
}
 
double & LabeledSales::operator[](int i)
{
    if(i < 0 || i >= MONTHS)
        throw nbad_index(Label(), i);
    return Sales::operator[](i);
}
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
//main.cpp
#include <iostream>
#include <typeinfo>
#include "header.h"
#include <cstdlib>
using namespace std;
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
 
    double vals1[12] =
    {
        1220, 1100, 1122, 2212, 1232, 2334,
        2884, 2393, 3302, 2922, 3002, 3544
    };
 
    double vals2[12] =
    {
        12, 11, 22, 21, 32, 34,
        28, 29, 33, 29, 32, 35
    };
 
    Sales sales1(2011, vals1, 12);
    LabeledSales sales2("Blogstar",2012, vals2, 12 );
 
    cout << "First try block:\n";
    try
    {
        int i;
        cout << "Year = " << sales1.Year() << endl;
        for (i = 0; i < 12; ++i)
        {
 
            cout << sales1[i] << ' ';
            if (i % 6 == 5)
                cout << endl;
        }
        cout << "Year = " << sales2.Year() << endl;
        cout << "Label = " << sales2.Label() << endl;
        for (i = 0; i <= 12; ++i)
        {
 
            cout << sales2[i] << ' ';
            if (i % 6 == 5)
                cout << endl;
        }
        cout << "End of try block 1.\n";
    }
    catch(Sales::bad_index & bad)
    {
        LabeledSales::nbad_index * arg;
        cout << bad.what();
        if(typeid(arg)==typeid(bad))
        {
            cout << "Company: " << bad.label_val() << endl;
        }
        cout << "bad index: " << bad.bi_val() << endl;
    }
    cout << "\nNext try block:\n";
    try
    {
        sales2[2] = 37.5;
        sales1[20] = 23345;
        cout << "End of try block 2.\n";
    }
    catch(Sales::bad_index & bad)
    {
        LabeledSales::nbad_index * arg;
        cout << bad.what();
        if(typeid(arg)==typeid(bad))
        {
            cout << "Company: " << bad.label_val() << endl;
        }
        cout << "bad index: " << bad.bi_val() << endl;
    }
    cout << "done\n";
    system("PAUSE");
    return 0;
}
Компилятор ругается(строчки 57 и 74), что 'label_val' не является методом 'Sales::bad_index', но 'LabeledSales::nbad_index' порожден от 'Sales::bad_index', что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru