C ++-де сыныптың данасын қалай жасайсыз?

Мен C ++ бастаушымын. Менде сабақ бар және оны құрастыруға тырысқанда, ол «басты» болып табылмайды.

Бұл сыныптың данасын жасау және оның әдістеріне қол жеткізу үшін не істеуім керек?

#include 
#include 

using namespace std;

class Account
{
      string name;
      double balance;

  public:
      Account(string n);
      Account(string n, double initial_balance);

      string get_name() const;
      double get_balance() const;

      void deposit(double amount);

      void widthdraw(double amount);

};

өңдеу:

Негізгі әдісті қайда қоюға болады?

Мен оны келесідей басқа файлға қоюға тырыстым

    #include 
    int main(){
    Account:: Account(string n) : name(n), balance(0){}
    return 0 ;
    }

бірақ бұл директорияда тіркелгі жоқ екенін айтады. Мен мұны ойлаймын, себебі ол құрастырылмаған

өңдеу:

Екі файл бірдей каталогта орналасқан

account_main.cc

    #include
    #include 
    #include "Account.cc"

    Account:: Account(string n) : name(n), balance(0){} 
    int main()
    {
        Account account("Account Name");//A variable called "account"
        account.deposit(100.00);//Calls the deposit() function on account

        return 0 ;
    }

Account.cc

#include
#include 

using namespace std;

class Account
{
      string name;
      double balance;

  public:
      Account(string n);
      Account(string n, double initial_balance);

      string get_name() const;
      double get_balance() const;

      void deposit(double amount);

      void widthdraw(double amount);

};
0
Сіз сыныптың конструкторын негізгі анықтамада анықтайсыз ба? Шынында да, үй тапсырмасы болса да, жақсы C ++ кітабын алыңыз және ең басты негізде жұмыс істеңіз.
қосылды автор Christian Rau, көзі
Егер бұл үй тапсырмасы болса, сізде оқып жатқан кітап жоқ па? Бұл іргелі нәрсені қамтуы керек екеніне сенімдімін.
қосылды автор ildjarn, көзі
main туралы парақ C ++ ішінде.
қосылды автор wkl, көзі
Сіз не үйренесіз? Меніңше, мұнда тізімделген бір немесе бірнеше кітаптар қажет: stackoverflow.com/q/388242/10077
қосылды автор Fred Larson, көзі

3 жауаптар

Барлық C ++ бағдарламалары кіріс нүктесі деп аталатын нәрсені талап етеді. main() функциясы әрқашан стандартты C ++ бағдарламалары үшін кіру нүктесі болып табылады. main() ұсыну қажет, олай болмаған жағдайда сілтеме беруші шағымданады. main() функциясын екі жолдың бірінде жаза аласыз:

int main()
{
    return 0;
}

Немесе, пәрмен жолы дәлелдер күтсеңіз:

int main(int argc, char ** argv)
{
    return 0;
}

void main() C ++ ішінде жарамсыз екенін ескеріңіз. Сондай-ақ, return операторына main() функциялары үшін қатаң қажет емес екендігін ескеріңіз, бірақ бірізділік үшін біреуін нақты жазуыңыз керек.

C ++ Standard 3.6.1 Негізгі функция [basic.start.main]

     

5. Негізгі функцияны қайтару мәлімдемесі (автоматты түрде сақталатын кез келген объектілерді жою) және   дәлел ретінде қайтару мәнімен шығу. Егер бақылау жетеді   қайтару туралы өтінішке тап болмайынша, негізгі нәтиже әсер етеді   орындалатын

  0 қайтару;
 

Соңғы түзетуіңіз туралы сұраққа жауап беру үшін:

#include 

int main(){ 
    Account:: Account(string n) : name(n), balance(0){} 
    return 0 ; 
} 

main() нысаны дұрыс, бірақ бұл сынып мүшелерінің анықтамаларын қалай қамтамасыз етпейді. Конструктор негізгі функциядан тыс болуы керек.

#include 

// Outside of main()
Account::Account(string n) : name(n), balance(0)
{
} 

int main()
{ 
     return 0 ; 
} 

Account данасын жасау үшін, сіз айнымалыны жариялап, келесідей барлық қажетті конструкторлық дәлелдерді жібересіз:

int main()
{
    Account account("Account Name");//A variable called "account"
    account.deposit(100.00);//Calls the deposit() function on account
                            //Make sure you provide a function
                            //definition for Account::deposit().
    return 0;
}

Also, check the exact file path of where class Account is. If the Account class is in a file called Account.h and is in the same folder as the file containing the main() function, then you need to use #include "Account.h" instead of #include in that file. For example:

#include "Account.h"//Note .h and quotes

Account::Account(string n) : name(n), balance(0)
{
} 

int main()
{
   //...
    return 0;
}

Бұл шын мәнінде C ++ бағдарламалау тілінің негізгі аспектісі. Әрине, сізде бұл кітапты қамтитын кітап бар ма? Шындығында main() функциялары және #include сөздері әдетте C ++ бағдарламасында бағдарлама кезінде үйренетін бірінші нәрсе болып табылады. Мен жақсы C ++ кітапты алып, оны оқуды ұсынамын жаттығуларды орындаңыз.

6
қосылды
бұған рахмет. Мен түпнұсқаға қосқаннан кейін қарап шығыңыз.
қосылды автор code511788465541441, көзі
Мен main_account.cc ішіндегі негізгі әдіс бар, ол account.cc сияқты қалтада. main_account.cc файлын құрастыруға тырысқанда, ол тіркелгіде табылмайды. Мен #include және #include деп істедім, бірақ ол жұмыс істемейді. Сондай-ақ, осы каталогта Есептік жазба орындалмайды және оны жасай алмаймын, себебі Есептік жазбаны құрастыруға тырысқанда, ол ешқандай негізгі әдіс емес дейді
қосылды автор code511788465541441, көзі
Мен екі файлдың мазмұнын түпнұсқалық хабарға қосып, егер бар болса, қате нұсқаны қарап шығыңыз және жіберіңіз. рахмет
қосылды автор code511788465541441, көзі
Жақсы мен main_account.cc құрастырған кезде мен мұны жасадым «main_account.cc:(.text+0x92):» Account :: deposit (double) «белгісіз анықтамасы» «
қосылды автор code511788465541441, көзі
оны алғыс айтқым келеді
қосылды автор code511788465541441, көзі
@ user521180: Account.cc дегенге Account.cc атын өзгертіңіз және Account_main.cc #include «Account.h»/code>.
қосылды автор In silico, көзі
@ user521180: Қандай файл class Account орналасқан? Account.h деп аталады ма? Өйткені, сізде файл кеңейтілімін де көрсету керек. Сондай-ақ, файлды компиляциялау кезінде бастапқы файлға файл жолын емес, main_account.cc тақырыбындағы файлды емес, Account емес, жібереді.
қосылды автор In silico, көзі
@Tyler Ferraro: Ия. Менің соңғы редакциямды қараңыз.
қосылды автор In silico, көзі
Бұл жарамды ма? Бұл ештеңе қайтармайды ...
қосылды автор Genzume, көзі

For your latest edit: not Account in the directory

мына әрекетті орындаңыз:

#include "Account.h"  //quotes, and .h


Account:: Account(string n)  //this must be outside of main, it's its own function
: name(n), balance(0) //I put these on three seperate lines but
{}                    //that's a personal choice

int main(){  //this is what the code should do when it starts
    Account person1("George"); //create a Account called person1 with the name George
    cout << person1.get_name(); //c-output person1's name.
    return 0 ; //return success (success=0)
}
1
қосылды
#include «Account.cc» жұмыс істеді. негізгі әдіспен класс жасалады, бірақ Account.cc құрастырылған жоқ, ол қалыпты жағдай емес пе?
қосылды автор code511788465541441, көзі
Сізге кез-келген компиляторды қолдануға үйрету үшін біреуді іздеңіз. Сізде жоғалып кеткен көптеген қадамдар мен тұжырымдар бар.
қосылды автор Mooing Duck, көзі
Сіз #include файлын қотарғанда, ол негізінен бұл файлды ағымдағыға көшіріп, сол файлдағы заттар шынымен жинақталады. Сіз неге бұл компиляция емес дейді?
қосылды автор Mooing Duck, көзі
#include негізінен берілген файлдың мазмұнын қосу директивасының орнына қояды. Сонымен, #include «Account.cc» арқылы Account.cc мазмұны main_account.cc бөлігі ретінде жасалады. Әдетте бұл сияқты .cc файлдарын қосудың жаман тәжірибесі. Оның орнына '.h' тақырыбының файлын қолданып, .cc файлында орын алатын тақырыпқа қалай өту керектігін айқындаңыз. Сіздің жағдайда std :: #include және Account.cc аккаунтының Account.h атауын өзгертіңіз.
қосылды автор bames53, көзі

көрсетілгендей, сізге лайықты кітап қажет. Сұрақтарыңызға жауап беру үшін сізге төмендегілерді білу қажет: Сыныптар әдетте .h файлында анықталады және .cpp немесе .cc файлында іске асырылады. Сізде үш файл болуы керек: Account.h, Account.cc және main.cc. Сіз тек .cc файлдарын құрастырасыз және .h файлдары сынып туралы бір нәрсе білу қажет болатын код бөліктеріне енгізілген (яғни, сіз шынымен сыныппен бір нәрсе жасап жатқанда). G ++ (linux, unix немесе mingw деп ойласам) сіз келесі пәрменді пайдалана отырып бағдарламаны құрастыра аласыз: g ++ main.cc Account.cc -o program_name

main.cc:

#include 
using namespace std;

#include "Account.h"
int main() {
  Account a("first account");

  cout << a.get_balance() << endl;
  a.deposit(100.0);
  cout << a.get_balance() << endl;

  return 0;
}

Сіздің Есептік жазбаңыз.h файлыңыз келесідей болуы керек:

#include
//#include  -- not needed here

// using namespace std; -- don't use 'using' in header files

class Account
{
  std::string name;
  double balance;

public:
    Account(std::string n);
    Account(std::string n, double initial_balance);

    std::string get_name() const;
    double get_balance() const;

    void deposit(double amount);

    void widthdraw(double amount);

};

Ақырында сіздің Account.cc файлыңыз сыныпты іске асыруы керек.

#include "Account.h"

using namespace std;

Account::Account(string n) : name(n), balance(0.0) {}

Account::Account(string n, double initial_balance) :
name(n), balance(initial_balance) {}

string Account::get_name() const {
  return name;
}

double Account::get_balance() const {
  return balance;
}

void Account::deposit(double amount) {
  balance += amount;
}

void Account::widthdraw(double amount) {
  balance -= amount;//generously allow overdraft...
}

Бұл көмектеседі деп үміттенемін.

Роман

1
қосылды