Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
#1

Особенности наследования - C++

06.11.2010, 10:12. Просмотров 451. Ответов 2
Метки нет (Все метки)

Я не понимаю
C++
1
    ProperFraction f1(1,2)
вызывается цепочка
C++
1
2
3
    ProperFraction(int n, int d){
    FloatFraction(){
    Fraction(){
Меня вызывание этих 2-х конструкторов
C++
1
2
    FloatFraction(){
    Fraction(){
непонятны, по-моему так должно быть:
C++
1
2
3
    ProperFraction(int n, int d){
    FloatFraction(int n, int d){
    Fraction(int n, int d){
Почему так происходит ?

Вот весь код:
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
#include <stdafx.h>
#include "Fraction.h"
using namespace std;
class FloatFraction : public Fraction {
public:
    FloatFraction(){
        set(0, 1);
    }
    FloatFraction(int n, int d){
        set(n, d);
    }
    FloatFraction(int n){
        set(n, 1);
    }
    double get_float(){
      return static_cast<double>(get_num())/get_den();
    }
    FloatFraction(const Fraction& src) {
         set(src.get_num(), src.get_den());     
         printf ("zzzzzzzzz\n");
     }
};
class ProperFraction : public FloatFraction {
public:
    ProperFraction(){
        set(0, 1);
    }
    ProperFraction(int n, int d){
        set(n, d);
    }
    ProperFraction(int n){
        set(n, 1);
    }
    ProperFraction(const Fraction& src){
        set(src.Fraction::get_num(), src.get_den());
    }
    void pr_proper(ostream& os){
            if (get_whole() != 0)
            os << get_whole() << " ";
            os << get_num() << "/" << get_den();
        }
    int get_whole(){
                int n = Fraction::get_num();
                return n / get_den();
        }
    int get_num(){
        int n = Fraction::get_num();
        return n % get_den();
        }
    ProperFraction operator=(const ProperFraction& src){
        set(src.num, src.den);
        return *this;
    }
};
int main() {
    _asm int 3;
[BASIC]    ProperFraction f1(1,2)[/BASIC],f2(5,6),f3;
    f3=f1+f2;
    cout << "Value of f3 is ";
    f3.pr_proper(cout);
    cout << endl;
    cout << "Float value of is " << f3.get_float() << endl;
    return 0;
}
Fraction.h
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
#include "stdafx.h"
#include "conio.h"
using namespace std;
class Fraction{
    void normalize(){
        if (den == 0 || num == 0) {
        num = 0;
        den = 1;
        }
    }
    int gcf(int a, int b){
        if (a % b == 0)
        return abs(b);
    else
        return gcf(b, a % b);
    }
    int lcm(int a, int b){
        return (a/gcf(a,b)*b);
    }
public:
    int num, den;
    Fraction(){
        set(0, 1);
    }
    Fraction(int n, int d){
        set(n, d);
    }
    Fraction(int n){
        set(n,1);
    }
    Fraction(const Fraction& src){
        set(src.num,src.den);
    }
    void set(int n, int d){
        num = n; den = d; normalize();
    }
    int get_num() const{
        return num;
    }
    int get_den() const{
        return den;
    }
    Fraction add(const Fraction& other){
        Fraction fract;
    int lcd = lcm(den, other.den);
    int quot1 = lcd/den;
    int quot2 = lcd/other.den;
    fract.set(num * quot1 + other.num * quot2, lcd);
    fract.normalize();
    return fract;
    }
    Fraction mult(const Fraction& other){
        Fraction fract;
    fract.set(num * other.num, den * other.den);
    fract.normalize();
    return fract;
    }
    Fraction operator+(const Fraction& other){
        return add(other);
        }
    Fraction operator=(const Fraction& src){
        set(src.num, src.den);
        cout << "6666666666666" << endl;
        return *this;
    }
    Fraction operator*(const Fraction& other){
        return mult(other);
    }   
    friend ostream& operator << (ostream& os, Fraction& fr){
        os << fr.num << "/" << fr.den;
        return os;
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2010, 10:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Особенности наследования (C++):

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций? - C++
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

наследования - C++
Приведите пожалуйста пару примеров наследования.

Наследования - C++
Что именно наследует класс-потомок при наследовании? А что не наследует? Чем отличаются private, public и protected наследование?

Наследования - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class student { protected: int sem; string name; float...

Класс наследования - C++
ак єто можно сделать Класс одиночного наследования. a) Модифицировать класс динамической структуры данных,содержащей строки (л.р. №2),...

Интерфейсы и наследования - C++
Есть вот такая структура class Base { public: virtual void SomeBaseFun()=0; } class Object1: public Base { public: ...

2
Nick Alte
Эксперт С++
1642 / 1014 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
06.11.2010, 15:48 #2
Потому что надо конструкторы предков таки вызывать. Иначе вызывается конструктор по умолчанию, который вы так любезно определили.
C++
1
    ProperFraction(int n, int d): FloatFraction(n, d) { normalize (); }
0
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
06.11.2010, 16:15  [ТС] #3
А зачем разработчики такое сделали, это же не просто так
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2010, 16:15
Привет! Вот еще темы с ответами:

механизм наследования - C++
Есть такой код: #include &lt;iostream&gt; using namespace std; class base { protected: int i, j; // private to base, but...

Организация наследования - C++
Здраствуйте! У меня есть несколько классов: class Base { public: int baseGet() { return i; } void...

Виды наследования С++ - C++
Построить класс статистическая выборка числовых величин со свойствами: количество элементов выборки, массив элементов выборки и методами:...

Пример наследования - C++
Здравствуйте! Снова требуется пример. На сей раз пример наследования. Ничего подходящего пока найти не могу. Допустим, базовый класс и...


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

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

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