Ahojte, nenašel by se tady někdo kdo by mi za malou úplatu online pomohl s vyřešením několika problému týkajících se programování většinově v C++?
Díky
Zkusím tedy postnout pár příkladu u kterých si nejsem jistý nebo vůbec nevím co s nimi.
Řekl bych, že u 14) se ten příkaz nevyhodnotí nijak, protože void nevrací žádnou hodnotu.
13) f je ukazatel na integer se dvěma parametry.
12) b je funkce typu a s parametrem c.
Ani jednou odpovědí si nejsem jist je to jen co jsem za posledních pár dní nastudoval z internetu.
12. 1) Deklarace funkce b s parametrem typu c vracejici typ a
2) konstruktor promenne b typu a s jednim parametrem c (nicmene novejsi standard doporucuje spise pouzit a b{c}; jelikoz je to snadno zamenitelne a misto objektu se ti tam vyrobi deklarace funkce!!)
13. f je typu pointer na funkci ocekavajici parametr typu int a dalsi parametr typu reference na int s navratovou hodnotou typu int
14. f je adresa funkce f, nic to samozrejme neudela, protoze i kdyby f vratilo tu adresu, stejne se s ni nic nedela. Krom toho to kompilator muze uplne vyhodit.
Dále mám ještě tuhle snad poslední věc se kterou si teda vůbec nevím rady. Díky za jakýkoliv komentář.
jen od oka:
v B jsou dve instance z (A::z a B::z neboli z), pokud pristupujes k pointeru na B, tak se pouziva to z B a pokud ten pointer zkopirujes do A * a, tak se uz cela trida bere jen jako A - tudiz a->z uz by melo ukazovat na tu instanci ze zakladni tridy. A jelikoz A ma defaultni konstruktor (ktery se samozrejme zavola pri vytvareni instance B), tak tam bude 1
(jeste si to pro jistotu overim, ale melo by se to chovat presne takto)
#8 KIIV
Ano souhlasí. Ale nevím jestli není možné aby některé kompilátory vyhodili chybu.
http://ideone.com/EgzL3f
#9 Kowalsky95
je to zdedena trida, takze pointer jde bez problemu priradit do pointeru na tu zakladni
opacne uz by se asi melo delat pres static_cast (nebo pokud by tam byly virtualni metody tak dynamic_cast)
ale co je spatny, tak jde udelat treba todle:
#include <iostream>
using namespace std;
class A {
public:
int z;
A() : z(1) {;}
};
class B : public A {
public:
int z;
};
class C : public A {
public:
int x;
};
int main() {
B * b = new B;
b->z = 22;
A * a = b;
cout << a->z << " " << b->z << endl;
C * c = static_cast<C*>(a);
cout << c->x << endl;
}
sice to projde, ale zobrazi to obsah promenne b->z tim c->x (ale to je jen proto, ze to lezi na podobnem offsetu)
Kdyz to jde u metod, proc by to nemelo jit u promennejch?
Je to vcelku to same jako, kdyz definujes stejnej nazev promenny v nekolika urovnich.. taky se to bere za chybu jen kdyz je to ve stejne urovni.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku