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

Ссылки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ return *char http://www.cyberforum.ru/cpp-beginners/thread174007.html
если функция дожна возвращать строку... как это сделать? я написала так: char* GetString(char *filename) { FILE *f1; char str; f1=fopen(filename,"r"); if (f1!=0) fgets(str,100,f1);...
C++ Перевод из 10 в 2 систему через маску Здравствуйте! Пожалуйста помогите написать программу для перевода чисел из 10 в 2 системы счисления через маску Написать программу на языке C++, читающую со стандартного ввода 4 деся- тичных... http://www.cyberforum.ru/cpp-beginners/thread173993.html
C++ Переход на классы
Эмн... Вот тут возникла такая ситуация... Есть задание и код (написанный мною естессна), но его нужно переписать на классы, ибо сейчас он написал по-обычному(... Задание звучит так: При записи...
альфа-наложение цвета C++
есть массив пикселей, рисуется несколько графиков со сглаживанием (Графики рисуются последовательно). Нужно в местах пересечения пикселей использовать альфа-наложение, т.е. есть цвет А(0x8800FF00)...
C++ Напишите программу для тестирования пользовательскои функции http://www.cyberforum.ru/cpp-beginners/thread173956.html
Напишите программу для тестирования пользовательскои функции qualityPoints, которая проверяет балл студента и возвращает: 4, если балл студента составляет 90-100, 3, если в балл 80-89, 2, если...
C++ Напишите программу для вычисления корней Напишите программу для вычисления корней (решений) линейного уравнения bx + c = 0 и для вычисления корней (решений) квадратного уравнения ax2 + bx + c = 0. Создать соответствующее количество строк... подробнее

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

Ссылки - C++

08.10.2010, 20:08. Просмотров 397. Ответов 2
Метки (Все метки)

Hi all
Нельзя возвращать ссылку, если возвращаемое значение является локальной переменоой как здесь, потому что локальные переменные уничтожаются после выхода из функции
Код:


C++
1
2
3
4
5
6
7
8
9
Fraction& Fraction::add(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;
}
Вот весь код, где возвращается ссылка из локальной переменной:
Код:


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
#include "stdafx.h"
#include "conio.h"
using namespace std;
class Fraction {
private:
    int num, den;   
public:
    Fraction() {num = 0; den = 0; normalize();} 
    Fraction(int n, int d) {set(n, d);}
 
    void set(int n, int d) {num = n; den = d; normalize();}
    int get_num()  {return num;}
    int get_den()  {return den;}
    Fraction add(Fraction other);
    Fraction mult(Fraction other);
private:
    void normalize(); 
    int gcf(int a, int b);     
    int lcm(int a, int b);    
};
int main(){
    Fraction f1, f2;
    Fraction f3(1, 2);
 
    cout << "The value of f1 is ";
    cout << f1.get_num() << "/";
    cout << f1.get_den() << endl;
 
    cout << "The value of f3 is ";
    cout << f3.get_num() << "/";
    cout << f3.get_den() << endl;
    return 0;
}
void Fraction::normalize(){
    if (den == 0 || num == 0) {
        num = 0;
        den = 1;
    }
 
    if (den < 0) {
        num *= -1;
        den *= -1;
    }
 
    int n = gcf(num, den);
    num = num / n;
    den = den / n;
}
int Fraction::gcf(int a, int b) {
    if (a % b == 0)
        return abs(b);
    else
        return gcf(b, a % b);
}
int Fraction::lcm(int a, int b){
    return (a / gcf(a, b)) * b;
}
Fraction& Fraction::add(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 fract; объявить глобально ?
Почему так нельзя?
Вот код, где возвращается ссылка для глобальной переменной
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
#include "stdafx.h"
#include "conio.h"
using namespace std;
class Fraction {
private:
    int num, den;   
public:
    Fraction() {num = 0; den = 0; normalize();} 
    Fraction(int n, int d) {set(n, d);}
 
    void set(int n, int d) {num = n; den = d; normalize();}
    int get_num()  {return num;}
    int get_den()  {return den;}
    Fraction add(Fraction other);
    Fraction mult(Fraction other);
private:
    void normalize(); 
    int gcf(int a, int b);     
    int lcm(int a, int b);    
};
        Fraction fract;
int main(){
    Fraction f1, f2;
    Fraction f3(1, 2);
 
    cout << "The value of f1 is ";
    cout << f1.get_num() << "/";
    cout << f1.get_den() << endl;
 
    cout << "The value of f3 is ";
    cout << f3.get_num() << "/";
    cout << f3.get_den() << endl;
    return 0;
}
void Fraction::normalize(){
    if (den == 0 || num == 0) {
        num = 0;
        den = 1;
    }
 
    if (den < 0) {
        num *= -1;
        den *= -1;
    }
 
    int n = gcf(num, den);
    num = num / n;
    den = den / n;
}
int Fraction::gcf(int a, int b) {
    if (a % b == 0)
        return abs(b);
    else
        return gcf(b, a % b);
}
int Fraction::lcm(int a, int b){
    return (a / gcf(a, b)) * b;
}
Fraction& Fraction::add(Fraction other) {
    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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru