Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Квест для всех остальных 
:(
    Опции темы
borisbn
Дата 11.7.2011, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



azesmcar, спасибо, понял (про тернарный в константном выражении)


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
azesmcar
Дата 11.7.2011, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Ну в общем-то практически на все вопросы уже ответили, но все равно сгруппировать стоит.
Кому хочется еще подумать можете не читать smile 

Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
1. есть ли какие-то принципиальные различия между тернарным оператором и оператором if, если есть, то какие.

Тернарный оператор умеет работать на этапе компиляции и может быть использован в метапрограммировании. В этом и есть его принципиальное различие.

Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
2. что будет выведено и почему?

Как верно заметили на первой странице, приоритет оператора присваивания выше приоритета оператора запятая. Потому здесь будет выведено 10:1

Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
3. что делает этот код?

Это не вызов конструктора класса std::vector, это обявление прототипа функции по имени data, возвращающей std::vector<std::string> и принимающей два параметра типа std::istream_iterator<std::string> с именем формального параметра is и вторую, того же типа но без имени..скобки игнорируются. В C++ все, что может быть интерпретировано как объявление интерпретируется как объявление.

Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
4. что выведет код и почему?

Здесь все действительно просто. Вызывается оператор запятая, потому работает первая перегрузка.
Цитата(volatile @  10.7.2011,  00:08 Найти цитируемый пост)
Единица просто теряется


Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
5. есть ли разница между переменными x1, x2 и x3, x4. Если есть, то какая?

В случаях x2 и x4 структура инициализируется нулями.
Цитата

An object whose initializer is an empty set of parentheses, i.e., (), shall be value-initialized.
...
To value-initialize an object of type T means:
— if T is a class type (clause 9) with a user-declared constructor (12.1), then the default constructor for T is
called (and the initialization is ill-formed if T has no accessible default constructor);
— if T is a non-union class type without a user-declared constructor, then every non-static data member
and base-class component of T is value-initialized;
— if T is an array type, then each element is value-initialized;
— otherwise, the object is zero-initialized


Цитата(azesmcar @  9.7.2011,  13:57 Найти цитируемый пост)
6. Какой конструктор копирования генерирует компилятор для класса при необходимости, с константной ссылкой или нет?

Здесь стоит рассказать побольше.
В C++ копирующим конструктором является конструктор, принимающий аргументом константную, либо обычную ссылку (+ все комбинации const и volatile) на объект своего типа. Если копирующий конструктор не написан пользователем, но необходим, компилятор попытается сгенерировать его сам. Сгенерированный конструктор копирования для класса
Код

struct A
{
   int x;
   int y;
};

будет иметь следующий вид
Код

A(const A& aref): x(aref.x), y(aref.y) {}

теперь заменим int x на какой нибудь класс X. В строчке x(aref.x) вызывается конструктор копирования для класса X, которому передается константная ссылка на объект класса X (константная, потому-что aref константа). В таком случае компилятор не сможет откомпилировать этот код и ему придется убрать константность аргумента копирующего конструктора класса A. Если вкратце, то константность аргумента копирующего конструктора решается компилятором в зависимости от константности аргументов конструкторов всех членов класса.


Это сообщение отредактировал(а) azesmcar - 11.7.2011, 09:15
PM   Вверх
bsa
Дата 11.7.2011, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(azesmcar @  10.7.2011,  23:52 Найти цитируемый пост)
это объявление прототипа функции.

эх, черт. прозевал.
PM   Вверх
azesmcar
Дата 11.7.2011, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(bsa @  11.7.2011,  10:31 Найти цитируемый пост)
эх, черт. прозевал. 

а ведь знал smile 
помню, что была тема с твоим участием.
PM   Вверх
bsa
Дата 11.7.2011, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



azesmcar, почему-то в тесте для сыроежки я увидел, а здесь нет. Видимо, из-за того, что погнался сразу за ожидаемым результатом...
PM   Вверх
mes
Дата 11.7.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



в продолжение квеста :
сколько конструкторов копий имеет нижеследующая структура ? 
Код

struct A 
{
   A(A&);
   A();
   A(double);   
   A(const A&, int i=5);   
   А(A&, int, double d=4.4);
   A(int, const A&);
   A(double, A&);
};




Это сообщение отредактировал(а) mes - 11.7.2011, 12:55


--------------------
PM MAIL WWW   Вверх
xvr
Дата 11.7.2011, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(mes @  11.7.2011,  12:54 Найти цитируемый пост)
сколько конструкторов копий имеет нижеследующая структура ? 

3

Маленькое замечание по тернарному ? и инициализации референсов. В большинстве случаев его можно заменить на if и тут, введя промежуточные указатели:
Код

int a,b;

int& c=f?a:b;

/////
int* tmp;
if (f) tmp=&a; else tmp=&b;
int& c=*tmp;

Исключение -
Код

class A;

A func1();
A func2();

const A& r = f?func1():func2();


PM MAIL   Вверх
azesmcar
Дата 11.7.2011, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(xvr @  11.7.2011,  13:10 Найти цитируемый пост)
3

а где третий?

если ты про
Цитата(mes @  11.7.2011,  12:54 Найти цитируемый пост)
A(double);   

то
Цитата

A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&,
volatile X& or const volatile X&, and either there are no other parameters or else all other
parameters have default arguments (8.3.6).106) [Example: X::X(const X&) and X::X(X&, int=1)
are copy constructors.


Это сообщение отредактировал(а) azesmcar - 11.7.2011, 16:00
PM   Вверх
bsa
Дата 11.7.2011, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(azesmcar @  11.7.2011,  15:46 Найти цитируемый пост)
а где третий?

mes, немного отредактировал код - изначально был конструктор типа А(A&, double d=4.4)
PM   Вверх
azesmcar
Дата 11.7.2011, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(bsa @  11.7.2011,  16:26 Найти цитируемый пост)
mes, немного отредактировал код - изначально был конструктор типа А(A&, double d=4.4) 

Ясно. Хотя тогда это была бы ошибка компиляции smile 

Это сообщение отредактировал(а) azesmcar - 11.7.2011, 16:37
PM   Вверх
mes
Дата 11.7.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(bsa @  11.7.2011,  15:26 Найти цитируемый пост)
mes, немного отредактировал код - изначально был конструктор типа А(A&, double d=4.4) 

неправда smile при редактированнии удалил лишь лишний пробел.. аргументы конструкторов не трогал smile

Цитата(azesmcar @  11.7.2011,  14:46 Найти цитируемый пост)
а где третий?

третьего не было smile

Это сообщение отредактировал(а) mes - 11.7.2011, 20:33


--------------------
PM MAIL WWW   Вверх
bsa
Дата 11.7.2011, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



mes, странно. видимо, мне, как и xvr показалось...
PM   Вверх
xvr
Дата 12.7.2011, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(mes @  11.7.2011,  20:22 Найти цитируемый пост)
третьего не было

Третьего действительно не было. Я слегка невнимательно прочел вопрос  smile 3й был A::A(double); Это конечно не копи конструктор, но для присваивания объектам класса A double'ов он может пригодится  smile 


PM MAIL   Вверх
azesmcar
Дата 14.7.2011, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



продолжим
Код

#include <string>

class A {
public:
    A(const std::string& x) { /* специально для Сыроежки ... */ }
    std::string foo() { return "something"; }
};

class B : public A
{
    std::string x;
public:
    B(): A(x = foo()) {}
};

int main()
{
    B b;
}

есть ли проблемы в коде и если есть, то какие.
PM   Вверх
xvr
Дата 14.7.2011, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Есть, как минимум 2:
  • Вызов A::foo до инициализации собственно класса A (хотя в данном примере оно и не сломается)
  • Инициализация базовых классов и мемберов будет проходить в порядке их описания в теле класса, т.е. сначала A потом x. Т.ч. присваивание в x в процессе вычисления параметра для конструктора A будет: во первых производится в неинициализированный экземпляр std::string, и во вторых это содержимое (полученное в std::string) будет уничтожено, т.к. конструктор (пустой) std::string все же будет вызван (но позже)
PS. В стандарт не смотрел, т.к. вне зависимости от того, сколько пунктов стандарта нарушает этот код, так писать нельзя  smile 


Это сообщение отредактировал(а) xvr - 14.7.2011, 10:56
PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1310 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.