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

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

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

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

23.04.2013, 12:03. Просмотров 395. Ответов 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++
Доброго времени суток. Хотелось бы задать несколько вопросов, ответы на которые мне не удалось найти в справочнике. 1. Можно ли...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон - C++
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...

Нужны коментарии к программе. Вывод типов переданных аргументов - C++
#include &lt;iostream&gt; template &lt;typename T&gt; struct NameOf {}; #define DEF_TYPENAME(type) template &lt;&gt; \ struct NameOf&lt;type&gt; {\ ...

Использование указателей в качесве аргументов функций - C++
Из целочисленного массива Х(N) все четные элементы записать в массив Y(k). Удалить в массивах максимальные элементы. В программе написать...

Создание функций, с произвольным количеством аргументов - C++
Всем доброго. Мне нужно создать функцию(с произвольным количеством аргументов), который использует первую(тоже с произвольным количеством...

Константные указатели в качестве аргументов функций - C++
Вскрылся вот такой пробел в знаниях/понимании. Итак, есть предположим однонаправленный список (в общем без разницы что). struct TNode {...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
23.04.2013, 12:04 #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Предположим, что правила проверки типов для аргументов ослаблены аналогично правилам для типов возвращаемых значений
Где указаны ослабления для возвращаемых значений?
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:13  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Где указаны ослабления для возвращаемых значений?
Не где. Есть просто условие задачи и все. Если б было б еще, что то я б добавил. В книге мб перевод не правильный поэтому и условие конкретное не всегда может быть. Возможно нужно смысл попытаться понять.

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

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

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

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

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

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

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

Вообщем запутанные задачки. Не такие и простые.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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 базового.
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
23.04.2013, 12:49  [ТС] #9
Цитата Сообщение от ForEveR Посмотреть сообщение
Примерно так, да.
Ну да видишь правила ж не ослабить никак
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 12:49
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.04.2013, 12:49
Ответ Создать тему
Опции темы

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