如何在C ++中分隔标题,类和主要函数?

时间:2009-08-05 12:50:03

标签: c++

请帮助我分离以下程序中的类,标题和main()。我尽我所能,但有问题。

#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;

class player
{
public:
    string name;
    string type;
    void getdata()
    {
        cout<<"Enter the name of the Player : "<<endl;
        cin>>name;
        cout<<"Enter the Game he play : "<<endl;
        cin>>type;
    }  
    void display()
    {
        cout<<"The name of the Player is : "<<name<<endl;
        cout<<"The game he will play is : "<<type<<endl;
    }
};

int main()
{
    player sachin;
    sachin.getdata();
    sachin.display();
    system("pause");
    return(0);
}

3 个答案:

答案 0 :(得分:4)

你的意思是你如何将它分成标题和cpp文件?

如果在Player.h中如此,你可以执行以下操作:

#ifndef __PLAYER_H_
#define __PLAYER_H_

#include<string>
using namespace std;

class player
{
protected: // could be private
    string name;
    string type;
public:
    void getdata();
    void display();
};

#endif

在player.cpp中:

#include "stdafx.h"
#include "Player.h"
#include<iostream>

void player::getdata()
{
    cout<<"Enter the name of the Player : "<<endl;
    cin>>name;
    cout<<"Enter the Game he play : "<<endl;
    cin>>type;
}

void player::display()
{
    cout<<"The name of the Player is : "<<name<<endl;
    cout<<"The game he will play is : "<<type<<endl;
}

然后在main.cpp中你会做以下事情:

#include "stdafx.h"
#include "player.h"

int main()
{
    player sachin;
    sachin.getdata();
    sachin.display();
    system("pause");
    return(0);
}

这是将所有内容拆分为单独的标头和cpp文件的理想方法:)

答案 1 :(得分:4)

C ++中典型的文件分离如下:

// myapp.cpp
// ---------

#include "player.h"
#include <cstdlib>
using std::system;

int main()
{
    player sachin;
    sachin.getdata();
    sachin.display();
    system("pause");
    return(0);
}

// player.h
// --------

// or #pragma once, since you're on MS.
#ifndef player_h
#define player_h

#include<string>

class player
{
public:
    std::string name;
    std::string type;
    void getdata();
    void display();
};
#endif

// player.cpp
// ----------

#include "player.h"
#include<iostream>
#include<string>
using namespace std;

void player::display()
{
    cout<<"The name of the Player is : "<<name<<endl;
    cout<<"The game he will play is : "<<type<<endl;
}
void player::getdata()
{
    cout<<"Enter the name of the Player : "<<endl;
    cin>>name;
    cout<<"Enter the Game he play : "<<endl;
    cin>>type;
}

还有一些其他的东西可以整理:你可能想把stdafx.h放回去,播放器中的字符串不需要公开。

另请注意,我没有在头文件中添加“using namespace std”。许多人不喜欢这样做,至少不是在全球范围内,但如果你的标题做了,那么如果他们使用你的类,那就强迫他们。当文件只适合你时,这两种方式都没有多大关系,但如果标题意外地“使用”了东西,那么在大型项目中这很重要。它可能会引起某些问题,因为他们没有意识到std中的所有函数都是可见的,并且在尝试调用别的东西时偶然调用一个函数。

我故意在三个文件中使用了所有三个选项:using namespace std;using std::system;或每次都指定命名空间。

答案 2 :(得分:1)

如果你想分开你的课程,你应该使用创建两个文件; .h&amp;的.cpp。

在头文件中放置定义和声明,在CPP文件中实现方法。

Player.h

#ifndef __PLAYER_H_
#define __PLAYER_H_

#include <string>

class Player
{
public:
    Player();
    ~Player();

    // Methods
    void GetData();
    void Display();

private:
    std::string Name;
    std::string Type;
}

#endif

Player.cpp

#include "Player.h"

Player::Player(): Name(""), 
                  Type("")
{
}

Player::~Player(){}

void Player::GetData()
{
    std::cout << "Enter the name of the Player : " << std::endl;
    std::cin >> name;
    std::cout << "Enter the Game he play : " << std::endl;
    std::cin >> type;
}  

void Player::Display()
{
    std::cout <<"The name of the Player is : " << name << std::endl;
    std::cout <<"The game he will play is : " << type << std::endl;
}

编辑:

类成员变量永远不应该公开;如果需要修改成员变量,请编写set方法。