prog_cpp
Toto je starší verze dokumentu!
Obsah
Základy C++
Třídy
- třida je obdoba struktury. V C++ lze dokonce psát třídy s funkcemi :)
- při definici se používá viditelnost
- private - přístupné pouze pro třídu.
- protected - přístupné pro třídu a potomky třidy.
- public - přístupné pro všechny
class user {
private:
int age;
string name;
..
public:
void setAge(int new);
}
- třída má konstruktor a desktruktor
- objekty - dynamická/statická alokace,
- dědičnost,
- třída dědí vše od svého předchudce
- polymorfismus
- interface/virtual
- dynamické přetypování,
polymorfismus
mám obecnou třídu a pak specifické podtřídy. V konstruktoru se inicializuje pro každou specifickou třídu něco jiného. Obecná třída má metodu run. Chci udělat frontu (vector) obecné třídy a při zpracování pak volat metodu run, která zachová podle hodnot nastavených v konstruktoru. Problém: jak to do té fronty dostat?
Když mám objekt obecné třídy, nelze jej přetypovat na různé podtřídy.
http://stackoverflow.com/questions/5313322/c-cast-to-derived-class
lass Animal { /* Some virtual members */ }
class Dog: public Animal {};
class Cat: public Animal {};
Dog dog;
Cat cat;
Animal& AnimalRef1 = dog; // Notice no cast required. (Dogs and cats are animals).
Animal& AnimalRef2 = cat;
Animal* AnimalPtr1 = &dog;
Animal* AnimlaPtr2 = &cat;
Cat& catRef1 = dynamic_cast<Cat&>(AnimalRef1); // Throws an exception AnimalRef1 is a dog
Cat* catPtr1 = dynamic_cast<Cat*>(AnimalPtr1); // Returns NULL AnimalPtr1 is a dog
Cat& catRef2 = dynamic_cast<Cat&>(AnimalRed2); // Works
Cat* catPtr2 = dynamic_cast<Cat*>(AnimalPtr2); // Works
// This on the other hand makes no sense
// An animal object is not a cat. Therefore it can not be treated like a Cat.
Animal a;
Cat& catRef1 = dynamic_cast<Cat&>(a); // Throws an exception Its not a CAT
Cat* catPtr1 = dynamic_cast<Cat*>(&a); // Returns NULL Its not a CAT.
Animal animal = cat; // This works. But it slices the cat part out and just
// assigns the animal part of the object.
Cat bigCat = animal; // Makes no sense.
// An animal is not a cat!!!!!
Dog bigDog = bigCat; // A cat is not a dog !!!!
std::vector<Animal*> barnYard; barnYard.push_back(&dog); barnYard.push_back(&cat); barnYard.push_back(&duck); barnYard.push_back(&chicken); Dog* dog = dynamic_cast<Dog*>(barnYard[1]); // Note: return NULL as this was the cat.
SLT kontejnery
- array - statické pole. Alokuje se při kompilaci.
- vector - dynamické pole. Automaticky alokuje paměť.
prog_cpp.1409218168.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
