Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Парапулька
0 / 0 / 1
Регистрация: 04.12.2010
Сообщений: 25
#1

классы.посмотрите пожалуйста) - C++

09.05.2011, 21:46. Просмотров 790. Ответов 10
Метки нет (Все метки)

ребят
вот проблема у меня возникла
написала программу по этому заданию:
Создать класс int3, имитирующий стандартный тип. Написать программу, в которой будут созданы 3 объекта класса int3, два из которых будут инициализированы. Сложите два инициализированных объекта, присвойте результат третьему и отобразите результат на экране.
Но мой преподаватель её жутко раскритиковал
наговорил море каких-то не очень понятных для меня-новичка слов
и значит сказал переделывать
вот текст моей программы
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
#include <iostream>
#include <cmath>
using namespace std;
class int3
{
public: 
        int a;
        int b;
        int ();
        int3(int,int);
        int sum();
};
int main()
{       int n;
         int3 chislo(3,4);
cout << "chislo a = " << chislo.a << endl;
cout << "chislo b = " << chislo.b << endl;
cout << chislo.sum()<<endl;
  cin >> n;
}
int3::int3(int int1, int int2)
    {
    a=int1;
    b=int2;
    }
int int3::sum()
    {
    return a+b;
    }
прошу помогите,разъясните в чём же тут у меня какие недочёты
только прошу разъяснять не на уровне профессионала,
а всего лишь новичка)
спасибо заранее кто откликнется)
http://www.cyberforum.ru/cpp-beginners/thread310430.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 21:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос классы.посмотрите пожалуйста) (C++):

посмотрите пожалуйста в чем ошибка
посмотрите пожалуйста в чем ошибка #include &lt;fstream.h&gt; #include &lt;conio.h&gt;...

Выдает ошибку. Посмотрите пожалуйста
#include &lt;iostream&gt; using namespace std; #define N 8 int prostoe (int...

Проверка. Посмотрите пожалуйста верно ли
Вычислить сумму ряда с погрешностью е=0,0001 в окрестности точки ноль, т.е. при...

посмотрите пожалуйста открылась и сразу закрылась
открывается и сразу закрывается..что здесь не так?? #include &lt;iostream&gt;...

Умножение двоичных чисел . Посмотрите пожалуйста
Вот у меня такая проблема . Не получается никак умножить (умножать нужно...

10
Veyron
106 / 106 / 9
Регистрация: 02.06.2009
Сообщений: 578
09.05.2011, 21:52 #2
вот это:
C++
1
2
3
4
int int3::sum()
        {
        return a+b;
        }
лучше переписать так:
C++
1
2
3
4
int3 operator +(int3& a, int3& b)
{
     return a+b;
}
1
ValeryLaptev
Эксперт С++
1049 / 828 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
09.05.2011, 22:03 #3
Цитата Сообщение от Veyron Посмотреть сообщение
вот это:
лучше переписать так:
C++
1
2
3
4
int3 operator +(int3& a, int3& b)
{
     return a+b;
}
Блин! Ну сколько можно уже писать: по КОНСТАНТНОЙ ССЫЛКЕ параметры передавать надо!!!!
C++
1
2
3
4
int3 operator +(const int3& a, const int3& b)
{
     return a+b;
}
1
Парапулька
0 / 0 / 1
Регистрация: 04.12.2010
Сообщений: 25
09.05.2011, 22:04  [ТС] #4
ещё ругался по поводу
этого
C++
1
2
3
4
5
6
7
public: 
        int a;
        int b;
        int ();
        int3(int,int);
        int sum();
};
сказал что надо по другому создавать переменные класса описания
ну вобщем я не поняла(
0
ValeryLaptev
Эксперт С++
1049 / 828 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
09.05.2011, 22:10 #5
Вот тебе отрывок из моей книги.
Сделай по аналогии...
Классы-оболочки встроенных типов
Преобразование типов позволяет нам обойти запрет на определение новых операций для встроенных типов. Для этого мы должны определить класс-оболочку для встроенного типа и реализовать в этом классе преобразование типов и требуемые операции. Давайте реализуем операцию возведения в целую степень для типа double. Класс-оболочка представлен в листинге 3.16.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Листинг 3.16. Класс-оболочка Real для double
class Real
{    double t;
  public:
    Real (const double &a=0.0){ t = a;}    // double -> Real
    operator double () { return t; }       // Real -> double
// "новая" операция возведения в целую степень
    Real operator^(int d) 
    { double r = t; 
      if (d==0) return 1;                  // t^0 = 1
      else if (r==0) return 0;             // 0^d = 0
      else if (d==1) return *this;         // t^1 = t
      else if (d<0) { r=1/r; d=-d; }       // t^(-d)=(1/t)^d
      double p = 1; 
      for(int i=1; !(i>d); i++) p* = r;    // вычисляем степень
      return p;                            // неявное преобразование
    }
};
Проверка показывает, что все варианты работают правильно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{    Real t = 2;
    cout << (t^0) << endl;            // 2^0 = 1
    cout << (t^1) << endl;            // 2^1 = 2
    t = 1;
    cout << (t^12)    << endl;        // 1^12 = 1
    cout << (t^-2)    << endl;        // 1^-2 = 1
    t = 0;
    cout << (t^0) << endl;            // 0^0 = 1
    cout << (t^3) << endl;            // 0^3 = 0
    t = 2;
    cout << (t^2)    << endl;         // 2^2 = 4
    cout << (t^-2)    << endl;        // 2^-2 = 0.25
    return 0;
}
Но надо помнить, что эта операция работает только для переменных типа Real — константы типа double таким способом возводить в степень не получится.
Таким образом, мы можем легко ввести «новые» арифметические операции для любого встроенного типа данных. Например, для int можно написать класс Integer, который инкапсулирует все, касающееся целых чисел. Собственно, мы действовали аналогично разработчикам языка программирования Java, реализовав тип-оболочку для встроенного типа данных.
0
Object
Заблокирован
09.05.2011, 22:12 #6
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
int3 operator +(const int3& a, const int3& b)
{
return a+b;
}
бесконечная рекурсия?
0
ValeryLaptev
Эксперт С++
1049 / 828 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
09.05.2011, 22:13 #7
Цитата Сообщение от Object Посмотреть сообщение
бесконечная рекурсия?
Надо поправить, конечно. Тем более, что в исходном классе - практически все неправильно, кроме конструктора...
0
Veyron
106 / 106 / 9
Регистрация: 02.06.2009
Сообщений: 578
09.05.2011, 22:31 #8
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
по КОНСТАНТНОЙ ССЫЛКЕ параметры передавать надо!!!!
Если по правильному стилю - то да. Но работать и так же будет.


Цитата Сообщение от Парапулька Посмотреть сообщение
ещё ругался по поводу
этого
Код C++1
2
3
4
5
6
7
8 public:
int a;
int b;
int ();
int3(int,int);
int sum();
};
сказал что надо по другому создавать переменные класса описания
ну вобщем я не поняла(
скорее всего из-за общего модификатора. Ничего не ставьте перед ними, они должны быть частными. Или перед их описанием напишите private.
0
ValeryLaptev
Эксперт С++
1049 / 828 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
09.05.2011, 22:33 #9
Цитата Сообщение от Veyron Посмотреть сообщение
Если по правильному стилю - то да. Но работать и так же будет.
Будет. Но давай ходить в галошах - тоже ведь обувь!
Нельзя попустительствовать в мелочах!
0
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
09.05.2011, 22:41 #10
C++
1
2
3
4
5
6
7
8
9
class int3
{
public: 
        int a;
        int b;
        int ();
        int3(int,int);
        int sum();
};
Зачем тут a и b? Да и int (); что это ? И по-хорошему int a надо приватным сделать.
0
Alligieri
CEO
Эксперт С++
2253 / 1243 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
10.05.2011, 02:54 #11
Парапулька, за качество прошу извинить - ночь уже, да и на с++ не пишу давно

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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class int3
{
    public: 
        int3();
        int3(int);
        int3 operator +(int3);
        operator int();
    private:
        int value;
};
 
int3::int3()
{
    this->value=0;
}
 
int3::int3(int value)
{
    this->value=value;
}
 
int3 int3::operator + (int3 other)
{
    return value+other;
}
 
int3::operator int()
{
    return this->value;
}
 
int main(void)
{
    int3 first(3);
    int3 second(4);
 
    int3 result;
 
    result=first+second;
 
    cout<<first<<"+"<<second<<"="<<result;
 
    getch(); //для задержки - можно убрать
    return 0;
}
1
10.05.2011, 02:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2011, 02:54
Привет! Вот еще темы с решениями:

посмотрите пожалуйста почему она не работает
я переводил с паскаля на с++ program laboratorna1; uses crt; type ar=array...

Что здесь не так? посмотрите пожалуйста
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;thread&gt; using namespace std;...

ребят посмотрите пожалуйста в чем ошибка кода
using System; using System.Collections.Generic; using System.Linq; using...

Пожалуйста посмотрите код, не пойму, что в окончании
дано действительное число х, натуральное число n. вычислить:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru