Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
1

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

23.04.2013, 12:03. Просмотров 548. Ответов 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*
Я так думаю утето от нас хотят в задаче?

По крайней мере я ее так сделаю и не буду парится, если вы ничо не добавите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2013, 12:03
Ответы с готовыми решениями:

Указание типов аргументов функций на примере bind ()
gcc version 4.2.1 20070719 #include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; #include...

Как пропукать только объявления функций двух типов без аргументов из потока ввода?
Необходимо создать сценарий, который из всех принимаемых со стандартного потока строк с помощью...

Слишком мало аргументов для вызова функций
Никак не пойму почему вызывается эта ошибка. #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include...

Составить программу для вычисления значения функций U(x,y) при заданных значениях аргументов х и у
Здравствуйте форумчане!Помогите,пожалуйста Нужно составить программу для вычисления значения...

8
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
23.04.2013, 12:04 2
Цитата Сообщение от ninja2 Посмотреть сообщение
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений
Где указаны ослабления для возвращаемых значений?
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
23.04.2013, 12:13  [ТС] 3
Цитата Сообщение от ForEveR Посмотреть сообщение
Где указаны ослабления для возвращаемых значений?
Не где. Есть просто условие задачи и все. Если б было б еще, что то я б добавил. В книге мб перевод не правильный поэтому и условие конкретное не всегда может быть. Возможно нужно смысл попытаться понять.

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

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

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

А мб я и не правильно думаю. Ну раз конкретных условий нету значит и решение такое не конкретное.
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
23.04.2013, 12:14 4
ninja2,
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений
Ключевое слово здесь "аналогично". Если что-то аналогично чему-то, значит что-то должно быть указано, разве нет? Внимательнее читайте параграф книги. Или имеется ввиду некое стандартное ослабление для возвращаемых типов, по отношению к аргументам?
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
23.04.2013, 12:19  [ТС] 5
Kuzia domovenok а ты что скажешь? Не ну меня твой ник веселит. Када вижу так сразу почемуто смешно становиться

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

Добавлено через 1 минуту
Цитата Сообщение от ninja2 Посмотреть сообщение
чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*
От хотябы из этого условия задачи, если мы заместим функцию которая имеет Base* на Derived*, то это нарушит правила случайно программа может стать не рабоче.
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
23.04.2013, 12:28 6
ninja2, Собственно, о чем задача указывается в параграфе прямо перед заданиями. Там и указаны ослабления (речь идет о стандартных ослаблениях).
0
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
23.04.2013, 12:36  [ТС] 7
Да от я внимательно условие задачи прочитал и просмотрел параграф.
Под замещение понимается замещение виртуальной функции в производном классе
то есть если б была функция в базовом классе Base* zam(Base*), то в производном мы ее б могли заменить на Derived* zam(Derived*). А такого послабления по моему не существует.
Это если взять утето условие:
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений с тем, чтобы можно было заместить функцию, имеющую аргумент типа Base*, на функцию с аргументом Derived*
Значит получается теоретическая задачка. Просто так поразмышлять по теме

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

Вообщем запутанные задачки. Не такие и простые.
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
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 базового.
1
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,039
23.04.2013, 12:49  [ТС] 9
Цитата Сообщение от ForEveR Посмотреть сообщение
Примерно так, да.
Ну да видишь правила ж не ослабить никак
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2013, 12:49

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

Доказать свойство булевых функций от n аргументов и полных систем функций
Докажите, что среди булевых функций от n аргументов имеется ровно 2^(2^n-2)-2^(2^(n-1)-1) ...

Определение и использование функций для обработки стандартных типов данных
Заданы три числа. Отрицательные числа заменить абсолютными значениям, нулевые значения – единицами,...

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

Комбинация разных типов аргументов функции
Есть функция, принимающая производное количество аргументов: def Out(*args): if _STOUT_ or...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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