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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Парапулька
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 25
#1

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

09.05.2011, 21:46. Просмотров 759. Ответов 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;
    }
прошу помогите,разъясните в чём же тут у меня какие недочёты
только прошу разъяснять не на уровне профессионала,
а всего лишь новичка)
спасибо заранее кто откликнется)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 21:46     классы.посмотрите пожалуйста)
Посмотрите здесь:

Посмотрите код пожалуйста... - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { int n,*b,i,k; double x; float **M;// двухмерная...

Проверка. Посмотрите пожалуйста верно ли - C++
Вычислить сумму ряда с погрешностью е=0,0001 в окрестности точки ноль, т.е. при |x|&lt;1:...

посмотрите пожалуйста в чем ошибка - C++
посмотрите пожалуйста в чем ошибка #include &lt;fstream.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #define n 1 struct Krainu { ...

Умножение двоичных чисел . Посмотрите пожалуйста - C++
Вот у меня такая проблема . Не получается никак умножить (умножать нужно дополнительные коды): Знайти добуток D=A*(-B) А=25,...

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

посмотрите пожалуйста почему она не работает - C++
я переводил с паскаля на с++ program laboratorna1; uses crt; type ar=array of real; var j,n,i:integer; a:ar; s:real; ...

ребят посмотрите пожалуйста в чем ошибка кода - C++
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication27 { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
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;
}
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 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;
}
Парапулька
0 / 0 / 0
Регистрация: 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();
};
сказал что надо по другому создавать переменные класса описания
ну вобщем я не поняла(
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 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, реализовав тип-оболочку для встроенного типа данных.
Object
Заблокирован
09.05.2011, 22:12     классы.посмотрите пожалуйста) #6
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
int3 operator +(const int3& a, const int3& b)
{
return a+b;
}
бесконечная рекурсия?
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
09.05.2011, 22:13     классы.посмотрите пожалуйста) #7
Цитата Сообщение от Object Посмотреть сообщение
бесконечная рекурсия?
Надо поправить, конечно. Тем более, что в исходном классе - практически все неправильно, кроме конструктора...
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
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.
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
09.05.2011, 22:33     классы.посмотрите пожалуйста) #9
Цитата Сообщение от Veyron Посмотреть сообщение
Если по правильному стилю - то да. Но работать и так же будет.
Будет. Но давай ходить в галошах - тоже ведь обувь!
Нельзя попустительствовать в мелочах!
KuKu
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,980
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 надо приватным сделать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2011, 02:54     классы.посмотрите пожалуйста)
Еще ссылки по теме:

Посмотрите пожалуйста где ошибка. Запись текста в файл - C++
#include &lt;iostream&gt;//программа для записи текста в файл. #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; int main() { ...

Никак не могу найти синтаксическую ошибку(посмотрите пожалуйста - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int Area(float a, float b,...

Все по учебнику а программа выдает ошибку, посмотрите пожалуйста - C++
#include &lt;iostream&gt; using namespace std; void simon (int); simon () int main () {

Если кто шарит в шаблонных классах, посмотрите пожалуйста - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; ...

посмотрите, пожалуйста, а то я даже не знаю как за нее взяться....( - C++
Постановка задачи: Разработать программу, выполняющую следующие функции: • ввод одномерного массива из n целых чисел (1&lt;=n&lt;=100); ...


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

Или воспользуйтесь поиском по форуму:
Alligieri
CEO
Эксперт С++
2248 / 1237 / 24
Регистрация: 16.03.2009
Сообщений: 3,581
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;
}
Yandex
Объявления
10.05.2011, 02:54     классы.посмотрите пожалуйста)
Ответ Создать тему
Опции темы

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