Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2013, 19:39   #51
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от fkty Посмотреть сообщение
....а что же такое &rhs,этого же нет нигде?
Меняем значения переменных местами. Запустите у себя.

Код:
#include <iostream>
using namespace std;

void swap (double& a, double& b) {
    double temp = a;
    a = b;
    b = temp;
}

int main() {
    double val1 = 5.5;
    double val2 = 23.3;
    
    cout << "val1 = " << val1 << endl;
    cout << "val2 = " << val2 << endl;
    
    cout << endl;
    cout << "swap()" << endl;
    swap(val1, val2);
    cout << endl;
    
    cout << "val1 = " << val1 << endl;
    cout << "val2 = " << val2 << endl;

    return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 06.10.2013, 19:42   #52
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию

ага,это понятно
fkty вне форума Ответить с цитированием
Старый 06.10.2013, 19:47   #53
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

А бывают другие ситуации, когда объект большой и его лучше по ссылке передавать(так как времени на копирование много уйдёт), но перестраховаться, чтобы его функция не изменила (иначе внешний объект изменится, как в примере выше), тогда передают так:

Код:
void func (const object& а) {

}
8Observer8 вне форума Ответить с цитированием
Старый 06.10.2013, 19:51   #54
fkty
Форумчанин
 
Регистрация: 22.05.2013
Сообщений: 245
По умолчанию

хорошо,спасибо
fkty вне форума Ответить с цитированием
Старый 06.10.2013, 20:07   #55
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Попробуйте оператор вывода понять. Если нам нужно вывести так:

Код:
Circle c;
cout << c << endl;
то нужно перезагрузить оператор вывода <<

Вы изучали комплексные числа? У комплексных чисел есть действительная и мнимая части. При сложении складываются отдельно действительная и мнимая. Мы перезагружаем оператор сложения. Для вывода на экран перезагружаем оператов вывода <<

Давайте разберём следующий код. Не бойтесь спрашивать. Копируйте строку, которая непонятна.

Код:
#include <iostream>
using namespace std;

class Complex {
public:
    Complex(double r, double i) : re_(r), im_(i) {
    }

    Complex(double r) : re_(r), im_(0) {
    }

    Complex() : re_(0), im_(0) {
    }
    
    friend Complex operator+(const Complex a1, const Complex a2);
    
    friend ostream& operator<<(const ostream& stream, const Complex a);

    double getre() const {
        return re_;
    }

    double getim() const {
        return im_;
    }

private:
    double re_;
    double im_;
};

Complex operator+(const Complex a1, const Complex a2) {
    Complex tmp;
    tmp.re_ = a1.re_ + a2.re_;
    tmp.im_ = a1.im_ + a2.im_;
    return tmp;
}

ostream& operator<<(ostream& stream, const Complex a) {
    stream << "re = " << a.getre() << endl;
    stream << "im = " << a.getim() << endl;
    return stream;
}

using namespace std;

int main(int argc, char** argv)
{
    Complex a(5.5, 5.5);
    Complex b(10.5, 15.5);
    Complex c;
    
    c = a + b;
    
    cout << c << endl;
    
    return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2013, 11:40   #56
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

В main должно быть как можно меньше когда.

Решённая задача на C++ - это создание одного или нескольких классов, пользоваться которым(ыми) легко и приятно.

Допустим у нас задача: складывать круги по их площадям и выводить значения площадей. В функции main должно быть минимум кода - только код отражающий решение задачи:

Код:
int main(int argc, char *argv[]) {

    Circle a(7.0);
    Circle b(6.0);
    Circle c(5.0);

    Circle d;
    d = a + b + c;

    cout << "Area is " << d.getArea() << endl;

    return 0;
}
Пользователь просто подключает Ваш класс к своему проекту с помощью директивы #include "Circle.h". Вот так:

Файл main.cpp
Код:
#include <iostream>
#include "Circle.h"
using namespace std;

int main(int argc, char *argv[]) {

    Circle a(7.0);
    Circle b(6.0);
    Circle c(5.0);

    Circle d;
    d = a + b + c;

    cout << "Area is " << d.getArea() << endl;

    return 0;
}
Файл Circle.h
Код:
#ifndef CIRCLE_H
#define	CIRCLE_H

#include <cmath>

class Circle {
public:

    Circle(double r = 0) : m_radius(r) {
        calcArea();
    }

    void setRadius(double r) {
        m_radius = r;
        calcArea();
    }

    double getRadius() const {
        return m_radius;
    }

    double getArea() const {
        return m_area;
    }

    Circle operator+(Circle rhs) {
        Circle sum;
        sum.m_area = m_area + rhs.m_area;
        return sum;
    }

private:
    double m_radius;
    double m_area;

    double calcArea() {
        m_area = M_PI * m_radius * m_radius;
        return m_area;
    }
};

#endif	/* CIRCLE_H */
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание и уничтожение объектов. Время жизни объектов C++/C# Anett// Помощь студентам 0 24.10.2011 23:26
Движение объектов используя классы ryashya Паскаль, Turbo Pascal, PascalABC.NET 0 29.09.2011 00:07
Классы, объекты,поля объектов Mr_skiner Общие вопросы Delphi 9 10.03.2011 23:07
Чем отличаются классы от объектов в Delphi? JY_ Помощь студентам 1 25.01.2009 18:57