a destruktor? delete [] pstring; ?
Příspěvky odeslané z IP adresy 85.71.215.–
Ahoj, mám následující fragment kódu. Potřeboval bych dopsat kopírovací konstruktor (hluboká kopie), destruktor a operátor přiřazení. Ale fakt nějak nevím jak. ( Byl to příklad v písemce a pokoušel sem si to doma napsat, ale fakt to nějak nechápu).
struct NoName{
NoName():pstring(new::std string); i(0),d(0){}
private:
std::string *pstring;
int i;
double d;
};
Ahoj,
v prvním kroku jsem si načetla číslo, pomocí cin, protože kontroluju pomocí cin.fail(), že jde skutečně o číslo jinak se musí číslo načíst znovu. V druhém kroku chci načíst string pomocí funkce getline(cin,string). Jenže getline se tváří, že v sobě již něco má a tak se přeskočí a celý program se ukončí... Nevíte v čem to je a jak to opravit?
while(1)
{
int hodnota;
cin >> hodnota;
if(cin.fail() )
{
cin.clear();
string pom;
getline(cin, pom);
cout<<"Zadal jsi spatny vstup. Zkus to znova: ";
}
else
{
break;
}
}
string zk;
cout<<"pis: ";
cin.clear();
zk.clear();
getline(cin,zk);
cout<<zk<<endl;
Super, díky
Ahoj, mám třídy Person, od které si vytvořím dynamickou instanci. Příkazem cin >> person bych chtěla načíst jméno osoby. Bohužel nevím jak to zapsat. Když to inicializuju staticky tak lehce zadám cin >> person, ale takto nevím. Poradíte někdo prosím? :-)
class Person
{
public:
string jmeno;
Person(){}
~Person(void){}
void ulozeniDoSouboru();
friend istream &operator>>(istream &stream, Person o);
};
istream &operator>>(istream &stream, Person &o)
{
cout << "Zadej sve jmeno: ";
stream >> o.jmeno;
return stream;
}
void Person::ulozeniDoSouboru()
{
ofstream myfile ("skore.txt", ios::app );
if (myfile.is_open())
{
myfile<< setw (23) << left << jmeno << "ahoj"<< endl;
myfile.close();
}
}
int main()
{
Person *person=new Person();
cin >>person;
person->ulozeniDoSouboru();
delete person;
return 0;
}
Super díky
Dobře, ale toto taky nefunguje:
class Porazeny:public Hrac
{
public:
Porazeny( int _pocetOdkrytychPoli,int _pocetSpravneVlajek,string _vysledek);
virtual void vypis()const;
};
void Porazeny:: vypis()const
{
cout << "Zasahl jsi minu...GAME OVER"<<endl;
cout<<jmeno<<endl;
cout<<"Pocet odkrytych poli "<<pocetOdkrytychPoli<<endl;
cout<<"Pocet spravne umistnenych vlajek: "<<pocetSpravneVlajek<<endl;
}
Říká to: multiple definition of Porazeny::vypis() const....
Ahoj,
implementuje abstraktni metodu vypis ve tride Porazeny.cpp, ktera dědí z abstratrkni tridu Hrac, chtěla bych jí ale dát hlavičkového souboru Porazeny.h. Bohužel mi to křicí, že error: virtual outside class declaration. Nevíte prosím co s tím?
class Porazeny:public Hrac
{
public:
Porazeny( int _pocetOdkrytychPoli,int _pocetSpravneVlajek,string _vysledek);
virtual void vypis()const;
};
Já bych chtěla něco takového:
virtual void Porazeny::vypis()const
{
cout << "Zasahl jsi minu...GAME OVER"<<endl;
cout<<jmeno<<endl;
cout<<"Pocet odkrytych poli "<<pocetOdkrytychPoli<<endl;
cout<<"Pocet spravne umistnenych vlajek: "<<pocetSpravneVlajek<<endl;
}
Ahoj,
potřeboval bych poradit. Mám vytvořit strom, kde rodič má max. 2 potomky a číslo rodiče je vždy nižší než číslo potomka. Na vstup mi přichází vždy dvojice čísel např:
4 2
2 5
2 1
1 3
3 6
Pokud mám např. čísla 3 1 znamená to, že 1 je rodič (nižší číslo) a 3 je potomek do leva.
Pokud mám např čísla 1 3 znamená to, že 1 rodič a tři je potomek do prava.
Vymyslel jsem následující kód, ale nevím jak to napsat tak, aby se mi vytvořil pomocí alogitmu komplet celý kód:
class Node {
int key;
Node parent; // Někdy není potřeba.
Node left, right;
Node(){}
Node(int k) {
key = k;
} // Konstruktor.
public void preorder(Node u) {
if (u == null) {
return;
} else {
System.out.println(u.key); //1. koren
preorder(u.left); //2. L podstrom
preorder(u.right); //3. P podstrom
}
}
}
public static void main(String[] args) {
Node root1 = new Node(2);
root1.left = new Node(4);
root1.right = new Node(5);
root1.parent =new Node(1);
Node root2 = new Node(1);
root2.left = root1;
root2.right = new Node(3);
root2.right.right = new Node(6);
root1.preorder(root1);
}
Ahoj, mám dvojrozměrné pole (9x9), kde se nacházejí tři oblasti nul:
0 0 0 0 1 1 1 0 0
0 0 1 1 1 1 1 0 0
0 1 1 1 1 1 0 0 0
0 1 1 1 1 1 1 0 0
0 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 0 0
1 1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1
0 0 0 0 0 1 1 1 1
Vyberu například pozici [0][0] a chci aby se všechny nuly, které jsou součástí této oblasti nakopírovali do pole1 (9x9), které bude, ale jinak naplněné 9. Vymyslel jsem následují kód, ale bohužel se mi odkryjí všechny nuly, ale já bych potřeboval ke hře hledání min, odkrýt jen to jednu oblast nul. Samozřejmě pozice 0 se mění, toto je pouze pole vytvořené pro zkoušku. Prosím poraďte...
#include <iostream>
using namespace std;
int pole[9][9];
int poleHrac[9][9];
void jsem1(int radek, int sloupec)
{
for(int i=(radek-1); i<=(radek+1); i++)//radky
{
for(int j=(sloupec-1); j<=(sloupec+1); j++)//sloupce
{
// if(i>(radek-1)&&i<(radek+1))
// if(j>(sloupec-1)&&j<(sloupec+1))
if (i > -1 && j > -1 && i < 9 && j < 9)
if(pole[i][j] ==0)
poleHrac[i][j]=0;
}
}
}
void jsem(int radek, int sloupec)
{
poleHrac[radek][sloupec] = 0;
for(int i=0; i<9; i++)//radky
{
for(int j=0; j<=9; j++)//sloupce
{
if (i > -1 && j > -1 && i < 9 && j < 9)
if(i>(radek-1)&&i<(radek+1))
if(j>(sloupec-1)&&j<(sloupec+1))
if(pole[i][j] <1)
poleHrac[i][j]=0;
jsem1(i,j);
}
}
}
int main()
{
for(int i =0; i < 9; i++)
{
for(int j =0; j < 9; j++)
{
pole[i][j]=1;
}
}
for(int i =0; i < 9; i++)
{
for(int j =0; j < 9; j++)
{
poleHrac[i][j]=9;
}
}
pole[0][0] = 0;
pole[0][1] = 0;
pole[0][2] = 0;
pole[0][3] = 0;
pole[1][0] = 0;
pole[1][1] = 0;
pole[2][0] = 0;
pole[3][0] = 0;
pole[4][0] = 0;
pole[8][0] = 0;
pole[8][1] = 0;
pole[8][2] = 0;
pole[7][2] = 0;
pole[8][3] = 0;
pole[8][4] = 0;
pole[0][7] = 0;
pole[0][8] = 0;
pole[1][7] = 0;
pole[1][8] = 0;
pole[2][6] = 0;
pole[2][7] = 0;
pole[2][8] = 0;
pole[3][7] = 0;
pole[3][8] = 0;
pole[4][7] = 0;
pole[4][8] = 0;
pole[5][7] = 0;
pole[5][8] = 0;
int radek = 0;
int sloupec =0;
if(pole[radek][sloupec]==0) {
jsem(radek,sloupec);
}
for(int i =0; i < 9; i++)
{
for(int j =0; j < 9; j++)
{
cout << pole[i][j]<<" ";
}
cout <<endl;
}
cout<<endl;
for(int i =0; i < 9; i++)
{
for(int j =0; j < 9; j++)
{
cout << poleHrac[i][j]<<" ";
}
cout <<endl;
}
}
Ahoj,
mám následující problém. Načítám z textového souboru po řádcích, mám načítat dokud se nebojeví prádzný řádek. Vymyslel jsem toto:
string line;
ifstream myfile;
myfile.open ("promenne.txt");
if (myfile.is_open()) {
while (line.empty()){
getline(myfile,line);
cout << line <<endl;
}
}
Bohužel toto načítá pouze první řádek a dále již nenačítá. Nevíte jak na to ?
Ahoj,
pomocí funkce getline načítám ze souboru řádek
string radek;
getline(prikazovySoubor,radek);",
který je v podstatě deklarace proměnné v tomto tvaru:
promenna a 0x 0a 23 4e 6b ab
Tento řetězec mám tedy uložený ve string radek. Pro další část programu,ale potřebuji pouze tuto část : 0a 23 4e 6b ab. Problém ovšem nastává v tom, že mezer může být mezi jednotlivými částmi víc (tím odpadá možnost odmazat prvních 10 pomocí for cyklu). Neporadíte mi jak na to? ( Vím o funkce strtok(), ale ta je na chary..., takže to asi není řešení.)