如何在C ++中创建类的实例

时间:2011-10-27 18:26:30

标签: c++

我是C ++初学者。我有一个班级,当我尝试编译它时说它缺少'main'。

创建此类的实例并访问其方法需要做什么?

#include <string>
#include <iostream>

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 <Account>
    int main(){
    Account:: Account(string n) : name(n), balance(0){}
    return 0 ;
    }

但是这会出错,说目录中没有Account。我猜这是因为它没有编译

修改

两个文件都在同一目录中

account_main.cc

    #include<string>
    #include <iostream>
    #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<string>
#include <iostream>

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);

};

3 个答案:

答案 0 :(得分:6)

所有C ++程序都需要所谓的入口点main()函数始终是标准C ++程序的入口点。您需要提供main()函数,否则链接器会抱怨。您可以通过以下两种方式之一编写main()函数:

int main()
{
    return 0;
}

或者,如果您期望命令行参数:

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

请注意,void main() 在C ++中无效。另请注意,return语句对于main()函数并不是绝对必要的,但为了保持一致,您应该明确地编写一个语句。

  

C ++标准3.6.1主要功能[basic.start.main]

     

5. main中的return语句具有离开main函数的效果(销毁具有自动存储持续时间的任何对象)和   以返回值作为参数调用exit。如果控制到达   main的结尾没有遇到return语句,效果是   执行

    return 0;

要回答有关最新修改的问题:

#include <Account>

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

main()的形式是正确的,但这不是您提供类成员定义的方式。构造函数需要在main函数之外。

#include <Account>

// 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;
}

另外,请检查class Account所在的确切文件路径。如果Account类位于名为Account.h的文件中,并且与包含main()函数的文件位于同一文件夹中,则需要使用#include "Account.h"而不是{#include <Account> 1}}在该文件中。例如:

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

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

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

这实际上是C ++编程语言的一个相当基本的方面。你肯定有一本书涵盖了这个吗?事实上,main()函数和#include语句通常是您在使用C ++编程时学到的第一件事。我强烈建议您选择a good C++ book并仔细阅读并进行练习。

答案 1 :(得分:1)

对于您的最新修改: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)
}

答案 2 :(得分:1)

正如已经指出的那样,你需要一本像样的书。要回答您的问题,您应该了解以下内容: 类通常在.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 <iostream>
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;
}

您的Account.h文件应如下所示:

#include<string>
//#include <iostream> -- 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...
}

希望有所帮助。

罗马