Как задать конструктор для класса без имени?
От: nxt  
Дата: 24.06.11 14:09
Оценка: 4 (1) :))
Например можно объявить класс без имени и сразу создать экземпляры его объектов.

class
{
int a;
int b;
} ob1, ob2;

Как для такого класса задать конструктор и деструктор?)
Re: Как задать конструктор для класса без имени?
От: Centaur Россия  
Дата: 24.06.11 15:03
Оценка: 16 (4) :)
Здравствуйте, nxt, Вы писали:

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


nxt>Как для такого класса задать конструктор и деструктор?)


Как звучит хлопок одной ладонью?
Re[2]: Как задать конструктор для класса без имени?
От: wander  
Дата: 24.06.11 15:17
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Как звучит хлопок одной ладонью?


  "Хлопок одной ладони"
Учителем храма Кеннин был Мокурай, Молчащий Гром. У него был маленький протеже по имени Тойо, которому было только 12 лет.
Тойо видел, как каждое утро и вечер более старшие ученики приходили в комнату учителя для получения общих инструкций по Сан-Дзен или для персонального обучения, при котором задавались коаны для того, чтобы освободить ум от заблуждений.
Тойо тоже захотел выполнять Сан-зен.
"Подожди немного,- сказал Мокурай, — ты еще молод."
Hо ребенок настаивал, так что учитель, наконец, был вынужден согласиться. Вечером в соответствующее время, маленький Тойо подошел к порогу комнаты Мокурая ля Сан-Дзен.
Он ударил в гонг, чтобы сообщить, что он пришел, три раза поклонился перед дверью в знак уважения, вошел и сел перед учителем в почтительном молчании.
"Ты можешь услышать хлопок двух ладоней, когда они ударяются друг о друга,- сказал Мокурай. — Теперь покажи мне хлопок одной ладони."
Тойо поклонился и пошел в свою комнату, чтобы рассмотреть эту проблему.
Из окна он услышал музыку гейш.
"Ах, я понял!"- воскликнул он.
На следующий вечер, когда учитель попросил его показать хлопок одной ладони, Тойо начал играть музыку гейш.
"Hет, нет,- сказал Мокурай,- это никак не подойдет. Это не хлопок одной ладони. Ты совсем не понял его."
Думая, что музыка будет мешать, Тойо ушел в более спокойное место. Он снова погрузился в медитацию.
"Чем же может быть хлопок одной ладони?"
Он услышал как капает вода.
"Я понял",- подумал Тойо.
Оказавшись перед учителем в слеующий раз, Тойо начал капать водой.
"Что это ?"- спросил Мокурай. — Это звук капающей воды, но не хлопок ладони. Попробуй еще раз."
Hапрасно Тойо медитировал, чтобы услышать хлопок одной ладони. Он услышал шум ветра, но и этот звук был отвергнут. Он услышал крик совы, но и этот звук был отвергнут.
Более чем 10 раз приходил Тойо к Мокураю с различными звуками, все было неправильно.
Почти год обдумывал он, что же может быть хлопком одной ладони. Hаконец, маленький Тойо достиг подлинной медитации и перешел пределы звуков. "Я больше не мог собирать их,- объяснил он позже,- поэтому я достиг безупречного звука."
Тойо реализовал хлопок одной ладони.
Re: Как задать конструктор для класса без имени?
От: licedey  
Дата: 24.06.11 15:48
Оценка:
Здравствуйте, nxt, Вы писали:

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


nxt>class

nxt>{
nxt> int a;
nxt> int b;
nxt>} ob1, ob2;

nxt>Как для такого класса задать конструктор и деструктор?)


class
{
int a,b;
} ob1 = { 1, 2 }, ob2 = { 3, 4 };
Re[2]: Как задать конструктор для класса без имени?
От: gegMOPO4  
Дата: 24.06.11 16:31
Оценка: 2 (2) :))) :))) :))) :))
Здравствуйте, Centaur, Вы писали:
C>Как звучит хлопок одной ладонью?

Как пощёчина.
Re: Как задать конструктор для класса без имени?
От: Vain Россия google.ru
Дата: 24.06.11 20:54
Оценка: +2
Здравствуйте, nxt, Вы писали:

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

nxt>class
nxt>{
nxt> int a;
nxt> int b;
nxt>} ob1, ob2;
nxt>Как для такого класса задать конструктор и деструктор?)
Зачем?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: Как задать конструктор для класса без имени?
От: VladFein США  
Дата: 24.06.11 20:56
Оценка: 10 (3)
Здравствуйте, nxt, Вы писали:

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


nxt>class

nxt>{
nxt> int a;
nxt> int b;
nxt>} ob1, ob2;

nxt>Как для такого класса задать конструктор и деструктор?)


Anonymous Class Types

Anonymous classes are subject to certain restrictions. Anonymous classes:
— Cannot have a constructor or destructor.
— Cannot be passed as arguments to functions (unless type checking is defeated using ellipses).
— Cannot be returned as return values from functions.

Re[2]: Как задать конструктор для класса без имени?
От: Alexey F  
Дата: 24.06.11 21:08
Оценка:
Здравствуйте, Vain, Вы писали:

V>Зачем?

Хмм, а оно (struct Dummy { Dummy() { ... } ... } dummy; ) легально или будет легально в C++0x? На codepad (4.1.2), как было показано выше, работает, 4.5.1 не ест с сообщением:

error: non-local function '<anonymous struct>::Dummy::Dummy()' uses anonymous type

, экспериментальный 4.7.0, prerelease 4.6.1 выдали:

error: anonymous type with no linkage used to declare function '<anonymous struct>::Dummy::Dummy()' with linkage [-fpermissive]

но все собрали в режиме -std=c++0x (кроме codepad'вского — там, если верить about, -std=c++98).
Re[2]: Как задать конструктор для класса без имени?
От: _nn_ www.nemerleweb.com
Дата: 26.06.11 11:40
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, nxt, Вы писали:


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

nxt>>class
nxt>>{
nxt>> int a;
nxt>> int b;
nxt>>} ob1, ob2;
nxt>>Как для такого класса задать конструктор и деструктор?)
V>Зачем?

Даешь мастер класс

  Детям до 18-ти не смотреть
#include <stdio.h>

int main()
{
    struct
    {
        int i;
        int j;
        struct Dummy
        {
            Dummy(void* p)
            {
                unsigned char* obj = static_cast<unsigned char*>(p);

                int i = *reinterpret_cast<int*>(obj + 0);
                int j = *reinterpret_cast<int*>(obj + 4);
                printf("хлопок одной ладонью i - %d, j - %d\n", i, j);
            }
        } dummy;
    } boom = { 1 , 2, &boom }, boom2 = { 3, 4, &boom2 };
}

http://ideone.com/lIGHD
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Как задать конструктор для класса без имени?
От: Ops Россия  
Дата: 26.06.11 12:19
Оценка:
Здравствуйте, _nn_, Вы писали:

А теперь возьмем другой компилятор, другую архитектуру, или просто поменяем упаковку.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[4]: Как задать конструктор для класса без имени?
От: Ops Россия  
Дата: 26.06.11 12:23
Оценка: :)
Здравствуйте, Ops, Вы писали:

Ops>Здравствуйте, _nn_, Вы писали:


Ops>А теперь возьмем другой компилятор, другую архитектуру, или просто поменяем упаковку.


Ну или встретит Вас человек, поддерживающий Ваше творение в темном переулке.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[5]: Как задать конструктор для класса без имени?
От: _nn_ www.nemerleweb.com
Дата: 26.06.11 12:42
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Здравствуйте, Ops, Вы писали:


Ops>>Здравствуйте, _nn_, Вы писали:


Ops>>А теперь возьмем другой компилятор, другую архитектуру, или просто поменяем упаковку.


Ops>Ну или встретит Вас человек, поддерживающий Ваше творение в темном переулке.


Ну так я не сказал, что это переносимо.
Или это было не понятно ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Как задать конструктор для класса без имени?
От: _nn_ www.nemerleweb.com
Дата: 26.06.11 13:03
Оценка:
Здравствуйте, Vain, Вы писали:

Portable version

#include <stdio.h>
#include <tuple>

using namespace std;

int main()
{
    struct
    {
        int i;
        int j;
        struct Dummy
        {
            Dummy(tuple<int, int> const& t)
            {
                int i, j;
                tie(i ,j) = t;

                printf("Хлопок одной ладонью %d %d\n", i, j);
            }
        } dummy;
    } boom = { 1 , 2, make_tuple(boom.i, boom.j) },
      boom2 = { 3 , 4, make_tuple(boom2.i, boom2.j) };
}


Для поддержки всех компиляторов заменить std на boost

P.S.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Как задать конструктор для класса без имени?
От: VladFein США  
Дата: 27.06.11 21:55
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Ну или встретит Вас человек, поддерживающий Ваше творение в темном переулке.


Почему он поддерживает это творение в темном переулке???
Re[6]: Как задать конструктор для класса без имени?
От: Erop Россия  
Дата: 27.06.11 22:18
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Почему он поддерживает это творение в темном переулке???


Потому, что на свет его показывать страшно
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Как задать конструктор для класса без имени?
От: B0FEE664  
Дата: 20.07.11 16:31
Оценка: 1 (1) -1 :)
Здравствуйте, VladFein, Вы писали:

nxt>>Как для такого класса задать конструктор и деструктор?)


VF>Anonymous Class Types


VF>

VF>Anonymous classes are subject to certain restrictions. Anonymous classes:
VF>- Cannot be returned as return values from functions.


Врут:

class { public: int m; } f(int n) { return f(0); }

int main (int argc, char * argv[])
{

   f(0).m = 1;
   return 0;
}


Компилируется и даже линкуется.
И каждый день — без права на ошибку...
Re[3]: Как задать конструктор для класса без имени?
От: gegMOPO4  
Дата: 20.07.11 17:02
Оценка:
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, VladFein, Вы писали:
nxt>>>Как для такого класса задать конструктор и деструктор?)
VF>>Anonymous Class Types
VF>>

VF>>Anonymous classes are subject to certain restrictions. Anonymous classes:
VF>>- Cannot be returned as return values from functions.

BFE>Врут:
BFE>
BFE>class { public: int m; } f(int n) { return f(0); }
BFE>int main (int argc, char * argv[])
BFE>{
BFE>   f(0).m = 1;
BFE>   return 0;
BFE>}
BFE>

BFE>Компилируется и даже линкуется.

А вы так не делайте.
Re[4]: Как задать конструктор для класса без имени?
От: B0FEE664  
Дата: 20.07.11 17:20
Оценка:
Здравствуйте, gegMOPO4, Вы писали:

BFE>>Врут:

BFE>>Компилируется и даже линкуется.
MOP>А вы так не делайте.
MS VS 2005
Microsoft (R) 32 bits C/C++ version 14.00.50727.762
Честно.
И каждый день — без права на ошибку...
Re[3]: Как задать конструктор для класса без имени?
От: uzhas Ниоткуда  
Дата: 20.07.11 17:58
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Врут:

комо не скушал

"ComeauTest.c", line 1: error: type definition is not allowed in function return
type declaration
class { public: int m; } f(int n) { return f(0); }

Re[5]: Как задать конструктор для класса без имени?
От: gegMOPO4  
Дата: 20.07.11 18:11
Оценка:
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, gegMOPO4, Вы писали:
BFE>>>Врут:
BFE>>>Компилируется и даже линкуется.
MOP>>А вы так не делайте.
BFE>MS VS 2005
BFE>Microsoft (R) 32 bits C/C++ version 14.00.50727.762
BFE>Честно.

Компилятор Microsoft издавна славился снисходительностью к некоторым вещам, которые потом приходилось лопатой выгребать при портировании.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.