Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Упражнения. 1. Представьте объявление класса SimpleCircle (простая окружность) с единственной переменой-членом itsRadius (радиус)






     

    1. Представьте объявление класса SimpleCircle (простая окружность) с единственной переменой-членом itsRadius (радиус). В классе должны использоваться конструктор и деструктор, заданные по умолчанию, а также метод установки радиуса.

    class SimpleCircle

    {

    public:

    SimpleCircle();

    ~SimpleCircle();

    void SetRadius(int);

    int GetRadiusO;

    private:

    int itsRadius;

    };

    2. Используя класс, созданный в упражнении!, с помошью конструктора, заданного по умолчанию, инициализируйте переменную itsRadius значением 5.

    SimpleCircle:: SimpleCircle():

    itsRadius(5);

    { }

    3. Добавьте в класс новый конструктор, который присваивает значение своего пара-

    метра переменной itsRadius.

    SimpleCircle:: SimpleCircle(int radius):

    itsRadius(radius)

    { }

    4. Перегрузите операторы преинкремента и постинкремента для использования в ва-

    шем классе SimpleCircle с переменной itsRadius.

    const SimpleCircle& SimpleCircle:: operator++()

    {

    ++(itsRadius);

    return *this;

    }

    // постфиксный оператор Operator ++(int).

    // Выборка, затем инкрементирование

    const SimpleCircle SimpleCircle:: operator++ (int)

    // обьявляем локальный обьект класса SimpleCircle и инициализируем его значением

    * this

    SimpleCircle temp(*this);

    ++(itsRadius);

    return temp;

    }

    5. Измените SimpleCircle таким образом, чтобы сохранять itsRadius в динамической области памяти и фиксировать существующие методы.

    class SimpleCircle

    {

    public:

    SimpleCircle();

    SimpleCircle(int);

    ~SimpleCircle();

    void SetRadius(int);

    int GetRadius();

    const SimpleCircle& operator++();

    const SimpleCircle operator++(int);

    private:

    int *itsRadius;

    };

    SimpleCircle:: SimpleCircle()

    {itsRadius = new int(5); }

    SimpleCircle:: SimpleCircle(int radius)

    {itsRadius = new int(radius); }

    SimpleCircle:: ~SimpleCircle()

    {

    delete itsRadius;

    }

    const SimpleCircle& SimpleCircle:: operator++()

    {

    ++(*itsRadius);

    return < < this;

    }

    // Постфиксный оператор Operator++(int).

    // Выборка, затем инкрементирование

    const SimpleCircle SimpleCircle:: operator++ (int)

    {

    // объявляем локальный объект класса SimpleCircle и инициализируем его значением

    *this

    SimpleCircle temp(< < this);

    ++(*itsRadius);

    return temp;

    }

    6. Создайте в классе SimpleCircle конструктор-копировщик.

    SimpleCircle:: SimpleCircle(const SimpleCircle & rhs)

    {

    int val = rhs.GetRadius();

    itsRadius = new int(val);

    }

    7. Перегрузите в классе SimpleCircle оператор присваивания.

    SimpleCircle& SimpleCircle:: operator=(const SimpleCircle & rhs)

    {

    if (this == & rhs)

    return *tnis;

    delete itsRadius;

    itsRadius = new int;

    *itsRadius = rhs.GetRadius();

    return *this;

    }

    8. Напишите программу, которая создает два объекта класса SimpleCircle. Для создания одного объекта используйте конструктор, заданный по умолчанию, а второму экземпляру при объявлении присвойте значение 9. С каждым из объектов используйте оператор инкремента и выведите полученные значения на печать. Наконец, присвойте значение одного объекта другому объекту и выведите результат на печать.

    #include < iostream.h>

    class SimpleCircle

    {

    public:

    // конструкторы

    SimpleCircle();

    SimpleCircle(int);

    SimpleCircle(const SimpleCircle &);

    ~SimpleCircle() {}

    // методы доступа к данным

    void SetRadius(int);

    int GetRadius() const;

    // операторы

    const SimpleCircle& operator++();

    const SimpleCircle operator++(int);

    SimpleCircle& operator=(const SimpleCircle &):

    private:

    int *itsRadius;

    };

    SimpleCircle:: SimpleCircle()

    {itsRadius = new int(5); }

    SimpleCircle:: SimpleCircle(int radius)

    {itsRadius = new int(radius); }

    SimpleCircle:: SimpleCircle(const SimpleCircle & rh$)

    {

    int val = rhs.GetRadius();

    itsRadius = new int(val);

    }

    SimpleCircle:: ~SimpleCircle()

    {

    delete itsRadius;

    }

    SimpleCircleS SimpleCircle: operator=(const SimpleCircle & rhs)

    {

    if (this == & rhs)

    return < < this;

    *itsRadius = rhs.GetRadius();

    return *this;

    }

    const SimpleCircle& SimpleCircle:: operator++()

    {

    ++(*itsRadius);

    return *this;

    }

    // Постфиксный оператор Operator ++(int).

    // Выборка, затем инкрементирование

    const SimpleCircle SimpleCircle:: operator++ (int)

    {

    // объявляем локальный объект класса SimpleCircle и инициализируем его значением

    *this

    SimpleCircle ternp(*this);

    ++(*itsRadius);

    return temp;

    }

    int SimpleCircle:: GetRadius() const

    {

    return ~itsRadius;

    }

    int main()

    {

    SimpleCircle CircleOne, CircleTwo(9);

    CircleOne++;

    ++CircleTwo;

    cout < < " CircleOne: " < < CircleOne.GetRadius() < < endl;

    cout < < " CircleTwo: " < < CircleTwo.GetRadius() < < endl;

    CircleOne = CircleTwo;

    cout < < " CircleOne: " < < CircleOne.GetRadius() < < endl:

    cout < < " CircleTwo: " < < CircleTwo.GetRadius() < < endl;

    return 0;

    }

    9. Жучки: что неправильно в следующем примере использования оператора присваивания?

    SQUARE SQUARE:: operator=(const SQUARE & rhs)

    {

    itsSide - new int;

    *itsSide = rhs.GetSide();

    return *this;

    }

    Нужно выполнить проверку на равенство объектов rhs и this, в противном случае обращение к оператору а = а приведет к аварийному отказу вашей программы.

    10. Жучки: что неправильно в следующем примере использования оператора суммирования?

    VeryShort VeryShort:: operator+ (const VeryShort& rhs)

    {

    itsVai += rhs.GetltsVal();

    return *this;

    }

    Этот оператор operator+ изменяет значение в одном из операндов, а не создает с помощью суммирования новый объект VeryShort. Правильно написать следующее:

    VeryShort VeryShort:: operator+ (const VeryShort& rhs)

    {

    return VeryShort(itsVal + rhs.GetltsVal());

    }

     

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.