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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Опишите безопасное ослабление правил для типов аргументов замещаемых функций - C++

23.04.2013, 12:03. Просмотров 387. Ответов 8
Метки нет (Все метки)

Здорова!
Есть еще задачка запутанная:

Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений с тем, чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*. Напишите программу которая может испортить объект типа Derived без использования приведения типов. Опишите безопасное ослабление правил для типов аргументов замещаемых функций.

Что здесь от нас требуется я вообще не пойму.

Добавлено через 12 минут
Ну что кто первый сделает? Задачка в принципе очень легкая тока, что вроде "ЭВРИКА" произошло, как бы ясно стало, что от на хотят. Примерно догадался.
Кто первый решить тому плюс к репутации сразу ставлю!

Добавлено через 13 минут
Лано вижу вы сильно долго думаете. Здесь я думаю просто имеется в веду, если б были такие правила. Тут как бы имеется в веду что указателю на производный класс можно присвоить указатель базового класса. От например утакой код:
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
//oclablenie pravil proverki
#include <iostream>
using std::cout;
using std::endl;
 
class Base
{
public:
    virtual void print(){cout <<"Base::print()"<<endl;}
    virtual Base* zam(){return this;}
};
class Derived : public Base 
{
public:
    virtual void print(){cout <<"Base::print()"<<endl;}
    virtual Base* zam(){return this;}
};
 
int main()
{
    Derived* D=new(Derived);
    Derived* Zam=new(Derived);
    D=Zam->zam();//тут ошибка конечно же (испорченная программа)
    
    return 0;
}
И просто дальше описать примерно правила по которым можно разрешить такое присваивание Dirived* = Base*
Я так думаю утето от нас хотят в задаче?

По крайней мере я ее так сделаю и не буду парится, если вы ничо не добавите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2013, 12:03     Опишите безопасное ослабление правил для типов аргументов замещаемых функций
Посмотрите здесь:
Можно ли создать свой перегруженный вариант функций, для разных типов потока C++
C++ Создание функций, с произвольным количеством аргументов
C++ Константные указатели в качестве аргументов функций
Использование указателей в качесве аргументов функций C++
C++ Шаблоны функций (определение наименьшего из двух аргументов)
Шаблоны функций (определение наименьшего из двух аргументов) C++
C++ Вычисление значений функций при различных значениях аргументов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
23.04.2013, 12:04     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений
Где указаны ослабления для возвращаемых значений?
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:13  [ТС]     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Где указаны ослабления для возвращаемых значений?
Не где. Есть просто условие задачи и все. Если б было б еще, что то я б добавил. В книге мб перевод не правильный поэтому и условие конкретное не всегда может быть. Возможно нужно смысл попытаться понять.

Наверно ослабление это как бы мнимое просто предпологается что можно сделать на самом деле его нельзя сделать.

От если б в моем коде выше при присвоении указателю производного класса указателя базового класса не произошло б ошибки, то это можно было б считать ослаблением.

Добавлено через 6 минут
Ну и если такое можно б было делать, то просто описать правила по которым можно так было б присваивать. Но так же нельзя производный класс должен быть тогда копией базового ну или вызов функций только можно делать тех которые есть в базовом, а функции производного класса нельзя.

А мб я и не правильно думаю. Ну раз конкретных условий нету значит и решение такое не конкретное.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
23.04.2013, 12:14     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #4
ninja2,
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений
Ключевое слово здесь "аналогично". Если что-то аналогично чему-то, значит что-то должно быть указано, разве нет? Внимательнее читайте параграф книги. Или имеется ввиду некое стандартное ослабление для возвращаемых типов, по отношению к аргументам?
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:19  [ТС]     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #5
Kuzia domovenok а ты что скажешь? Не ну меня твой ник веселит. Када вижу так сразу почемуто смешно становиться

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
Ключевое слово здесь "аналогично". Если что-то аналогично чему-то, значит что-то должно быть указано, разве нет? Внимательнее читайте параграф книги. Или имеется ввиду некое стандартное ослабление для возвращаемых типов, по отношению к аргументам?
Ща просмотрю параграф но я думаю наврятли.

Добавлено через 1 минуту
Цитата Сообщение от ninja2 Посмотреть сообщение
чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*
От хотябы из этого условия задачи, если мы заместим функцию которая имеет Base* на Derived*, то это нарушит правила случайно программа может стать не рабоче.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
23.04.2013, 12:28     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #6
ninja2, Собственно, о чем задача указывается в параграфе прямо перед заданиями. Там и указаны ослабления (речь идет о стандартных ослаблениях).
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:36  [ТС]     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #7
Да от я внимательно условие задачи прочитал и просмотрел параграф.
Под замещение понимается замещение виртуальной функции в производном классе
то есть если б была функция в базовом классе Base* zam(Base*), то в производном мы ее б могли заменить на Derived* zam(Derived*). А такого послабления по моему не существует.
Это если взять утето условие:
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений с тем, чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*
Значит получается теоретическая задачка. Просто так поразмышлять по теме

Добавлено через 4 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Собственно, о чем задача указывается в параграфе прямо перед заданиями. Там и указаны ослабления (речь идет о стандартных ослаблениях).
Параграф называется "Иерархии классов" там есть замещение при множественном наследовании, таких правил нету.
Если б они были, то в условии прямо сказали не предположите а используйте ослабление. Предположим здесь ключевое слово.

Вообщем запутанные задачки. Не такие и простые.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
23.04.2013, 12:37     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #8
ninja2, Примерно так, да.
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
#include <iostream>
 
class A
{
public:
   virtual ~A() {}
   virtual A* clone() { return new A(*this); }
   virtual void print() { std::cout << "A" << std::endl; }
   virtual void release(A* ptr) { std::cout << "A::release" << std::endl; }
};
 
class B : public A
{
public:
   virtual B* clone() { return new B(*this); }
   virtual void print() { std::cout << "B" << std::endl; }
   virtual void release(B* ptr) { std::cout << "B::release" << std::endl; }
};
 
int main()
{
   A* p = new B();
   A* p2 = p->clone();
   p2->print();
   B b;
   p2->release(&b);
   delete p;
   delete p2;
}
В первом случае - с виртуальностью все ок.
Во втором случае - это две разные функции. release в производном классе не перегружает release базового.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 12:49     Опишите безопасное ослабление правил для типов аргументов замещаемых функций
Еще ссылки по теме:
Вычисление значений функций от двух аргументов в заданном интервале C++
Указатели, адресная арифметика и передача аргументов функций по значению и по ссылке C++
C++ Найти предельные значения для целочисленных типов. Не использовать заранее определенные константы границ типов.
Нюансы синтаксиса и семантики: ссылки, указатели и массивы в качестве аргументов функций C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:49  [ТС]     Опишите безопасное ослабление правил для типов аргументов замещаемых функций #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Примерно так, да.
Ну да видишь правила ж не ослабить никак
Yandex
Объявления
23.04.2013, 12:49     Опишите безопасное ослабление правил для типов аргументов замещаемых функций
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru