Още C++ простотии
22 отговора
840 прегледа
Още C++ простотии
class A
{
protected:
char C;
public:
A & operator >> (char & _value)
{
_value = C;
return *this;
}
};
class B : public A
{
public:
/*
B & operator >> (B & _value)
{
_value.C = C;
return *this;
}
*/
};
int main(int, char*[])
{
B b;
char c;
b >> c; // след разкоментаряване на оператора в класа B, това вече не работи, a иначе си работи.
return 0;
}
Re: Още C++ простотии
Това е най-лесното да го направя (и съм го направил), но не мога да разбера, защо има проблем с overloaded members при наследяване. Примера който съм дал е валиден и за обикновенн метод на родителския клас, който докато няма overload в класа-наследник работи и се ползва наготово от наследниците. Ако обаче направя метод със същото име и други параметри в класа-наследник (overload), то за да работят подобните методи от класа-родител е необходимо всичките да се предефинират в класа-наследник. Това ми се вижда много безмислено. Всичките те са public и съответно са видими в наследниците. Какъв му е проблема на компилатора/езика тогава?
P.S.
Re: P.S.
Хванал си на баба си шортите ...
Я си дочети книгата и след това помисли къде трябва да сложиш: using A::operator >>;
Re: P.S.
Много преди да хвана на баба си шортите, опитах първо с "using". Това доведе до "Internal compiler error at ....". (последното си е проблем на Borland C++ Builder, но ме подведе достатъчно
). С VC++ нещата с using си работят.
А за проблема на Borland, ако те интересува, мога да ти постна примерен код, който генерира "internal compiler error" точно на мястото на using :-( за който и да е метод от класа-родител.
А за проблема на Borland, ако те интересува, мога да ти постна примерен код, който генерира "internal compiler error" точно на мястото на using :-( за който и да е метод от класа-родител.
Re: P.S.
Това дето си го постнал, заедно с малката корекция за която стана дума се компилира с Borland C++ 5.5.1. ... ( и с gcc, че и c VC6 ) ... Нещо друго ще да си набъркал!
П.С.: Знака подчертавка ( "_" ) преди променлива в GNU конвенцията за кодиране се ползва за член променливи.
П.С.: Знака подчертавка ( "_" ) преди променлива в GNU конвенцията за кодиране се ползва за член променливи.
Пробвай това с Borland C++ Builder 5.0
template <class T>
class A
{
protected:
T C;
public:
A & operator >> (T & _value)
{
_value = C;
return *this;
}
};
template <class T>
class B : public A<T>
{
public:
using A<T>::operator >>;
B & operator >> (B & _value)
{
_value.C = C;
return *this;
}
};
typedef B<char> C;
int main(int, char*[])
{
C c1;
char c;
c1 >> c;
return 0;
}
"Borland C++ Builder Version 5.0 (Build 12.34) Update Pack 1" не компилира този сорс!
VC++ .NET го компилира без проблем.
Re: Пробвай това с Borland C++ Builder 5.0
И под Linux е така. gcc се справя, borland се дъни.
$ g++ --version
g++ (GCC) 3.2 (Mandrake Linux 9.0 3.2-1mdk)
$ ../bc++ --version
Borland C++ 5.7 Open Edition Copyright (c) 1987, 2002 Borland
Assertion failed t.cc(37) : type->t.td.tdEnclType->tpTopType == T_TMPLDEP at ../../../indep/template.c(8242)
Aborted (core dumped)
$ g++ --version
g++ (GCC) 3.2 (Mandrake Linux 9.0 3.2-1mdk)
$ ../bc++ --version
Borland C++ 5.7 Open Edition Copyright (c) 1987, 2002 Borland
Assertion failed t.cc(37) : type->t.td.tdEnclType->tpTopType == T_TMPLDEP at ../../../indep/template.c(8242)
Aborted (core dumped)
Re: Още C++ простотии
Nedey da razbirash psevdonima mi bukvalno... Vsyshtnost, nikoga ne sym iskal da emigriram ot Bylgariya.
BTW, poznavame li se, otkyde znaesh, che vse pak ne sym emigriral?
BTW, poznavame li se, otkyde znaesh, che vse pak ne sym emigriral?
Re: Пробвай това с Borland C++ Builder 5.0
Постнах им вчера един "bug report" на Borland, пък ще видим. Баси шантавата работа. Сецнаха ми работата на средата, а фирмата се е изръсила сума си пари за Borland-ски компилатори и лицензи. Изръсила се е и за Microsoft-ски, ама нещата трябваше да върват и на двата.
Досега ме кефеше Borland, ама от вчера насам май са ми по-симпатични Microsoft. За GNU изобщо не става дума
.
Досега ме кефеше Borland, ама от вчера насам май са ми по-симпатични Microsoft. За GNU изобщо не става дума
Re: Пробвай това с Borland C++ Builder 5.0
Да, това с template-ите Borland не го вдяват за разлика от всички останали ... пробвах го с free компилатора им.
Прав си да им се нервиш. Извинявай за грубия ми тон вчера, но с този пример трябваше да почнеш.
Прав си да им се нервиш. Извинявай за грубия ми тон вчера, но с този пример трябваше да почнеш.
Re: Още C++ простотии
Ne, prosto predpolojih che kulturno bi si smenil nika ako eventualno emigrirash...
Re: Още C++ простотии
Този разговор ми припомня следната случка с мой приятел-емигрант в Щатите.
В неговата фирма наскоро се развъртяла метлата на съкращенията и станало изведнъж много сураво и кураво, не само за емигрантите.
Местен абориген (кореняк американец) се жалва на приятеля ми:
"Ееех, добре си си ти! Ами аз!? Нито мога да емигрирам в Щатите, защото съм си там, нито мога да се върна вкъщи, защото съм си вкъщи!"
(Това май беше повече за клуб "Емиграция", ама карай да е весело!
Пиркс
В неговата фирма наскоро се развъртяла метлата на съкращенията и станало изведнъж много сураво и кураво, не само за емигрантите.
Местен абориген (кореняк американец) се жалва на приятеля ми:
"Ееех, добре си си ти! Ами аз!? Нито мога да емигрирам в Щатите, защото съм си там, нито мога да се върна вкъщи, защото съм си вкъщи!"
(Това май беше повече за клуб "Емиграция", ама карай да е весело!
Пиркс
Re: Пробвай това с Borland C++ Builder 5.0
Re: Пробвай това с Borland C++ Builder 5.0
icc също го компилира без проблеми.
$ icc -V
Intel(R) C++ Compiler for 32-bit applications, Version 6.0.1 Build 20020822Z
Copyright (C) 1985-2002 Intel Corporation. All rights reserved.
$ icc -V
Intel(R) C++ Compiler for 32-bit applications, Version 6.0.1 Build 20020822Z
Copyright (C) 1985-2002 Intel Corporation. All rights reserved.
Re: P.S.
GNU konwencijata za "kodirane" mozhesh da si ja nawresh tam deto Richard Stallman ne gree.
Re: P.S.
Хехе :) Линус, ти ли си бе?
[url][линк]
First off, I'd suggest printing out a copy of the GNU coding standards, and NOT read it. Burn them, it's a great symbolic gesture.
[url][линк]
First off, I'd suggest printing out a copy of the GNU coding standards, and NOT read it. Burn them, it's a great symbolic gesture.