Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести последнее слово в тексте Дается определенное количество слов, нужно вывести последнее. https://www.cyberforum.ru/ cpp-beginners/ thread187386.html Простое число(проверьте пожалуйста) C++
Надо определить является ли введенное число простым или состовным. из алгебры известно что если она не делится ни на одно число до корня из самого себя то оно простое.Вот я что-то написала.Но как то не уверена.Посмотрите пожалуйста....хотя вроде работает. //--------------------------------------------------------------------------- #include <vcl.h> #include <conio.h> #include...
C++ В текстовом файле заменить точку на запятую, а запятую на многоточие Доброго времени суток! есть задание: в текстовом файле заменить точку на запятую, а запятую на ...(три точки) как открыть файл знаю, а вот просканировав его на наличие точек-запятых, как заменить? если заменить 1 знак на 3, то надо же подвигать текст вправо, иначе точки затрут буквы. помогите пжалста? https://www.cyberforum.ru/ cpp-beginners/ thread187372.html C++ Вычислить с заданной точностью Помогите написать программу, плз, я закинул в текстовый файл: https://www.cyberforum.ru/ cpp-beginners/ thread187370.html
цвет символа в Turbo C++ C++
подскажите, пожалуйста, как поменять цвет символа в Turbo C++
C++ циклы помогите вывести таблицу 4 3 2 1 0 3 2 1 0 2 1 0 1 0 0 https://www.cyberforum.ru/ cpp-beginners/ thread187350.html
C++ Выводит ошибку fatal error C1075: end of file found before the left brace '{' at 'c:\users\user\documents\visual studio 2008\projects\recex4\recex4\c Как испарвить ошибку fatal error C1075: end of file found before the left brace '{' at 'c:\users\user\documents\visual studio 2008\projects\recex4\recex4\car.h(13)' was matched ??? Вроде бы все скобки закрыты.... #include <fstream> #include <stack> #include <sstream> #include<iostream> #include"car.h" int main () https://www.cyberforum.ru/ cpp-beginners/ thread187334.html C++ Вычислить среднее арифметическое в каждой строке матрицы.
Дан двумерный числовой массив. Память выделить статически, заполнить с клавиатуры. Вывести массив в матричной форме. Вычислить среднее арифметическое в каждой строке матрицы.
C++ Компонент для браузера Добрый день. У меня возникла проблемка, мне нужно написать компонент для браузера который будет считывать в браузере строку ввода и открывать этот файл в программе моей. Объясняю: У меня есть программа которая открывает файлы своего формата. Нужен компонент для браузера который распознает строку ввода и если строка указывает на путь к файлу с моим расширением, то этот компонент копирует этот... https://www.cyberforum.ru/ cpp-beginners/ thread187310.html C++ Где посмотреть, сколько прога занимает по времени, байтам и еще мож чего интересного? где или как поглядеть все вышесказанное :) может сайт какой -нибудь чтоб проверка была, или даже в ВС написано где нибудь. https://www.cyberforum.ru/ cpp-beginners/ thread187304.html
C++ С ++ с нуля
Посоветуйте учебник по C++ с нуля ...
C++ циклы вывести на экран все целые числа из диапазона от А до Б, кратные трем (А<=B) https://www.cyberforum.ru/ cpp-beginners/ thread187270.html
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
08.11.2010, 04:17 0

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

08.11.2010, 04:17. Показов 809. Ответов 9
Метки (Все метки)

Ответ

Мне кажется, надо не разбираться в твоём коде, а показать пример, как сделать лучше.
Во-первых, с конструкторами следует работать не так (как нужно см. ниже). Во-вторых, дектруктор базового класса следует делать виртуальным. В-третьих, не нужно писать лишнего (например, переопределять конструктор копирования). В-четвёртых, не надо наследовать там, где это не нужно (вместо производного класса "float_fraction" лучше сделать метод "double_value" в базовом). В-пятых, функции нахождения НОД и НОК не следует делать методами класса "fraction" (кстати, НОК мне даже не пригодилось).

Вот моё видение твоей задачи.
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include "xtl_math.h"
 
class fraction {
public:
    fraction () : m_numerator(0), m_denominator(1) {}
    fraction (int numerator, int denominator) : m_numerator(numerator), m_denominator(denominator) { fix(); }
    
    virtual ~fraction () {}
    
    // ---- Арифметика ----------------------------------------------------------------------------
    
    fraction operator + (const fraction & f) const {
        return fraction(m_numerator * f.m_denominator + m_denominator * f.m_numerator, m_denominator * f.m_denominator);
    }
    fraction operator - (const fraction & f) const {
        return fraction(m_numerator * f.m_denominator - m_denominator * f.m_numerator, m_denominator * f.m_denominator);
    }
    fraction operator * (const fraction & f) const {
        return fraction(m_numerator * f.m_numerator, m_denominator * f.m_denominator);
    }
    fraction operator / (const fraction & f) const {
        return fraction(m_numerator * f.m_denominator, m_denominator * f.m_numerator);
    }
    
    fraction operator += (const fraction & f) { return *this = *this + f; }
    fraction operator -= (const fraction & f) { return *this = *this - f; }
    fraction operator *= (const fraction & f) { return *this = *this * f; }
    fraction operator /= (const fraction & f) { return *this = *this / f; }
    
    fraction operator - () { return fraction(-m_numerator, m_denominator); }
    fraction operator + () { return fraction(*this); }
    
    // ---- Доступ --------------------------------------------------------------------------------
    
    double double_value () const { return static_cast<double>(m_numerator) / m_denominator; }
    
    // ---- Ввод-вывод ----------------------------------------------------------------------------
    
    friend std::ostream & operator << (std::ostream & stream, const fraction & fract) {
        if (fract.m_numerator == 0 && fract.m_denominator == 0) stream << "nan";
        else if (fract.m_denominator == 0) stream << "inf";
        else if (fract.m_numerator == 0) stream << "0";
        else if (fract.m_denominator == 1) stream << fract.m_numerator;
        else stream << fract.m_numerator << "/" << fract.m_denominator;
        
        return stream;
    }
    
private:
    void fix () {
        simplify();
        fix_sign();
    }
 
    void simplify () {
        int g_c_d = xtd::gcd(m_numerator, m_denominator);
        
        if (g_c_d != 0) {
            m_numerator /= g_c_d;
            m_denominator /= g_c_d;
        }
    }
    
    void fix_sign () {
        if (m_denominator < 0) {
            m_denominator *= -1;
            m_numerator *= -1;
        }
    }
 
protected:
    int m_numerator;
    int m_denominator;
};
 
class proper_fraction : public fraction {
public:
    proper_fraction () : fraction() {}
    proper_fraction (int n, int d) : fraction(n, d) {}
    
    // Здесь нужно только переопределить вывод.
    friend std::ostream & operator << (std::ostream & stream, const proper_fraction & fract);
};
 
int main (int argc, char * const argv[]) {  
    std::cout << fraction()     << std::endl; // 0
    std::cout << fraction(0, 0) << std::endl; // nan
    std::cout << fraction(1, 0) << std::endl; // inf
    std::cout << fraction(1, 2) << std::endl; // 1/2
    
    std::cout << fraction(3, 7).double_value() << std::endl; // 0.428571
 
    return 0;
}
кусок файла xtl_math.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef _XTL_MATH_H
#define _XTL_MATH_H
 
#include <algorithm>
 
namespace xtd {
 
//!     Наибольший общий делитель (greatest common divisor).
int gcd (int first, int second) {
    if (second == 0) std::swap(first, second);
 
    while (second != 0 && (first %= second)) std::swap(first, second);
    
    return abs(second);
}
 
}
 
#endif


Вернуться к обсуждению:
Наследование(Не вызывается конструктор) C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2010, 04:17
Готовые ответы и решения:

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C { public:

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор)
class Test { int i; public: void test(int i) { this -&gt; i = i; } }; Конструктор...

Не вызывается конструктор
Есть конструктор, который я вызываю если, число, которое я передаю больше 20. Конструктор должен к...

Конструктор вызывается 2 раза
Помогите пожалуйста найти ошибку. Конструктор вызывается 2 раза. #include &lt;iostream&gt; #include...

9
08.11.2010, 04:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2010, 04:17
Помогаю со студенческими работами здесь

Конструктор класса не вызывается
Предположим есть файл с исходником main.cpp #include &lt;iostream&gt; #include &quot;my.h&quot; using...

НЕ вызывается конструктор копирования
НЕ вызывается конструктор копирования (не явно), как сделать чтобы это было явно? #include...

Вызывается не тот конструктор
При выполнении кода stroka* p=new stroka; p=new stroka(&quot;absd&quot;); Используется конструктор...

Не вызывается конструктор копии
#define st system(&quot;pause&quot;); #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru