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

Наследование(Не вызывается конструктор) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести последнее слово в тексте http://www.cyberforum.ru/cpp-beginners/thread187386.html
Дается определенное количество слов, нужно вывести последнее.
C++ Простое число(проверьте пожалуйста) Надо определить является ли введенное число простым или состовным. из алгебры известно что если она не делится ни на одно число до корня из самого себя то оно простое.Вот я что-то написала.Но как то... http://www.cyberforum.ru/cpp-beginners/thread187375.html
C++ В текстовом файле заменить точку на запятую, а запятую на многоточие
Доброго времени суток! есть задание: в текстовом файле заменить точку на запятую, а запятую на ...(три точки) как открыть файл знаю, а вот просканировав его на наличие точек-запятых, как заменить?...
C++ Вычислить с заданной точностью
Помогите написать программу, плз, я закинул в текстовый файл:
C++ цвет символа в Turbo C++ http://www.cyberforum.ru/cpp-beginners/thread187357.html
подскажите, пожалуйста, как поменять цвет символа в Turbo C++
C++ циклы помогите вывести таблицу 4 3 2 1 0 3 2 1 0 2 1 0 1 0 0 подробнее

Показать сообщение отдельно
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167

Наследование(Не вызывается конструктор) - C++

07.11.2010, 12:39. Просмотров 518. Ответов 9
Метки (Все метки)

f3=f1+f2;
1) Вызывается Fraction operator+(const Fraction& other)
2) Для возвращенного значения вызывается ProperFraction(const Fraction& src) для инициализации временного объекта (назовем его tmp) типа ProperFraction, но почему то при инициализации не вызывается конструктор ProperFraction, а сразу FloatFraction, почему так ?(Смотрел в отладчике)
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;
    ProperFraction f1(1,2),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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru