Автор Тема: Въпрос за C++ ООП  (Прочетена 4062 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Въпрос за C++ ООП
« -: 31 Октомври 2010, 13:16:16 »
Здравейте моля за помощ, от скоро взех да се занимавам със С++ и имам един въпрос. Във PHP можеше да се извиква метод в конструктора от същия клас и така си правих последователността на извикване на на методите и всичко си вървеше брилянтно. Но ето че в С++ това или не става или аз не знам как става. Има ли някоя врътка в случая, с която да извиквам методите от същия клас в конструктора или не. Благодаря на всички които могат да помогнат.

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Отг: Въпрос за C++ ООП
« Отговор #1 -: 01 Ноември 2010, 09:02:21 »
Я покажи кое не работи примерно с с 2-3 метода дето не се конструират?
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Отг: Въпрос за C++ ООП
« Отговор #2 -: 01 Ноември 2010, 19:31:53 »
Реших въпроса ето кода, ако някой иска да добави нещо или да критикува с удоволствие ще го изслушам все пак сега се уча нормално е да има грешки.

#include
#include
#include
using namespace std;
class File_db
{
private:
        string s1[200];
        string s2[200];
        string s3[200];
        string s4[200];
                       
public:
       string col[5];
       File_db();              
       void Line(int);
};
File_db::File_db()
     {                              
     string str[200];
     int i = 0, j = 0, last;
     ifstream myFile( " spisyk.txt " );
     if (! myFile)
     {
     cout <<  " Unable to open input file. "  << endl;  
     }
     while (! myFile.eof())
     {
     if ((i + 1) % 4 == 0) getline(myFile, str[i++]);
     else getline(myFile, str[i++],  ' - ' );
     }
     last = i;
     i = 0;
     while(i < last)
     {
     ++j;
     s1[j] = str[i++];
     s2[j] = str[i++];
     s3[j] = str[i++];
     s4[j] = str[i++];
     }
     myFile.close();
     };  


void File_db::Line(int nLine = 0)
     {
     col[1] = s1[nLine];
     col[2] = s2[nLine];
     col[3] = s3[nLine];
     col[4] = s4[nLine];
     };
     
int main()
{
File_db dbf;
dbf.Line(1);
cout << dbf.col[0]<< endl;
cout << dbf.col[1]<< endl;
cout << dbf.col[2]<< endl;
cout << dbf.col[3]<< endl;
cout << dbf.col[4]<< endl;
cout << endl;
system( " pause " );
return 0;
}
Мился че се сещате за какво става въпрос.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Отг:Въпрос за C++ ООП
« Отговор #3 -: 01 Ноември 2010, 19:43:27 »
А сетих се за друго. Защо не може да се държи многомерен масив като член променлива. Опитвах не става затова е така с няколко масива.
A относно горния въпрос трябва да инсталирам Apache за да проиграя кода та да ти пратя примери имах няколко подобни класа но явно съм ги изтрил. Бе ще търся решения ако пак се наложи при братушките. Много са напред с материята. :)

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг: Въпрос за C++ ООП
« Отговор #4 -: 02 Ноември 2010, 10:50:47 »
Не се сещаме. Кажи ни. Вземи да кажеш кое не ти се компилира и каква грешка ти дава и на кой ред. Или ако ти се компилира, на кой ред ти дава грешка или кога резултатите стават грешни.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Отг:Въпрос за C++ ООП
« Отговор #5 -: 02 Ноември 2010, 20:52:16 »
Така желанието ми бе да направя кода така:
class Foo
{
public:
string ab[20][10]; // проблем 1
string rez[10];
Foo(int);
private:
void Function1();
void Function2(int);
};
Foo::Foo(int ln)// конструктор
{
Funktion1(); // проблем 2
Function2(int ln); // проблем 2
}
void Function1()
{
Проверява фаила със списъка
Връща многомерен масив или задава функция на многомернния масив ab[20][10];
};
void Function2(int line)
{
rez[0]  = ab[line][0]
rez[1]  = ab[line][1]
rez[2]  = ab[line][2]
rez[3]  = ab[line][3]
//.......
}
int main()
{
int lin = 3;
Foo fo(lin);
cout << fo.rez[1] << endl;
cout << fo.rez[1] << endl;
//.........
system( " pause " );
return 0;
}

(!! написано на бързо само за да илюстрира идеята и не работи !!);
Нещо подобно ставаше в PHP тук не, а кода който пратих работи перфектно, запишете в текстовия файл 4 колони от имена примерно и ги разделете с -
Според мен става за четене на данни или списъци единственото ограничение е че броя на колоните е фиксиран.
Опитвах с vector но нещо не ме кефи като го вмъкна в клас не работи като private член променлива.
Сега умувам записването не списъци. т.е. ясно ми е как да го направя. Ако някой го интересува после като го направя ще кача сорса.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Въпрос за C++ ООП
« Отговор #6 -: 02 Ноември 2010, 23:46:44 »
Дееба... чувствам се все едно обяснявам на майка ми как да си отвори пощата
 " не работи "
WTF?!?!? к ' во значи че не работи?
Не ти се компилира, дава ти грешка, вади ти грешни резултати, компютърът ти се изключва като го напишеш или на целия квартал му спира тока?

Ей това:

// TestCppApplication.cpp : Defines the entry point for the console application.
//

#include  " stdafx.h "
#include

using namespace std;

class Foo
{
public:
string ab[20][10]; // проблем 1
string rez[10];
Foo(int);
private:
void Function1();
void Function2(int);
};
Foo::Foo(int ln)// конструктор
{
Function1(); // проблем 2
Function2(ln); // проблем 2
}
void Foo::Function1()
{
//Проверява фаила със списъка
//Връща многомерен масив или задава функция на многомернния масив ab[20][10];
};

void Foo::Function2(int line)
{
rez[0] = ab[line][0];
rez[1] = ab[line][1];
rez[2] = ab[line][2];
rez[3] = ab[line][3];
//.......
}


int _tmain(int argc, _TCHAR* argv[])
{
int lin = 3;
Foo fo = Foo(lin);
cout<//.........

return 0;
}


се компилиа и изпълнява без грешки. Разбира се в тоя си вид не прави нищо, обаче дето е казал мечо Пух от оня виц  " аз откъде да те знам ти кво си мислиш " .

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Отг:Въпрос за C++ ООП
« Отговор #7 -: 03 Ноември 2010, 09:26:58 »
Стана само многомерния масив не мога да го ползвам като член променлива. А кода не се компилира зарад него. Зарад многомерния масив.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Въпрос за C++ ООП
« Отговор #8 -: 03 Ноември 2010, 09:49:03 »
Ами горният код не се компилира щото му липсват половината точки, запетайки и подобни глупости. Явно няма как да се компилира затова минах и му ги сложих. В горния пример има двумерен масив като member и извикване на member функция в конструктор.

Искаш ли вече да си напишеш КОЕ НЕ РАБОТИ и КАКВА ГРЕШКА ДАВА.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Отг:Въпрос за C++ ООП
« Отговор #9 -: 03 Ноември 2010, 10:06:14 »
Сега ще го пробвам.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Отг:Въпрос за C++ ООП
« Отговор #10 -: 03 Ноември 2010, 10:20:39 »
Най-после работи: Не е било зарад точките пропуснал съм ги в поста. Задал съм по малко елементи на масива за колоните.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Отг:Въпрос за C++ ООП
« Отговор #11 -: 03 Ноември 2010, 10:30:39 »
Ами то затова хората са направили компилатори да дават грешки, runtime грешки, debugger-и и всякакви подобни полезни инструменти. То тая работа не е да седнеш и да съзерцаваш кода докато в процеса на медитация прозреш Истината.

haccac

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 80
Отг:Въпрос за C++ ООП
« Отговор #12 -: 03 Ноември 2010, 10:36:34 »
Май егото пак заговори  :)

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Re:Въпрос за C++ ООП
« Отговор #13 -: 16 Юни 2011, 08:25:48 »
Като цяло масивите в  C++ ООП в класовете о обектите,  работят малко по странно от масивите в си то и в процедурното писане.
да го имат предвид начинаещите..

А и да в си и СПП два масива не се копират така masiv1 = masiv2;  асигментният оператор = не е предифиниран и за да копирате два масива ви трябва цикъл който да обходи един по един елементите и да ги копира..

Другото което е..
Виждам че се мъчиш някаква структура от данни да направиш, то не е лошо ама е доста трудоемко даже за напреднали програмисти.
Използвай някой от съществуващи вече структури от данни, вектор или контейнер, с-стинг блаблабла, с масиви тая работа не става, тоест само с масиви не става, понеже един масив е статична структура от данни...
« Последна редакция: 16 Юни 2011, 08:33:38 от onewg »