C++中.CPP文件与.h文件有什么不同。详解与举例怎么使用

C++中.CPP文件与.h文件有什么不同。详解与举例怎么使用,第1张

以.h位后缀的是头文件,.cpp是源文件,一般都是在一个项目中。如果是初学c++的话,使用源文件(也就是.cpp)就足够编写出需要的源程序了。如书本上最基本的“Hello World”编码,只要在源文件中有一个主函数就可以完成一个程序。

在稍微复杂一点的程序中,也许就会用到头文件(.h)。事实上,这种头文件和代码中预处理里包含的头文件没有什么区别(就好像C语言中#include <stdio.h>)其中stdio.h就是一个头文件。

编写头文件就是按照自己的需要,给程序设计这样的头文件。头文件中,一般包含一些类的声明,函数定义之类的东西,方便在源文件的主函数中使用。

例如在a.h文件中:

#include <iostream>

using namespace std

class Try

{

public:

void do()

}

接下来,只要在源文件b.cpp中的预处理命令里写成:

#include <iostream>

#include "a.h" (也就是在这里加上#include "a.h"这一句)

using namespace std

.....

就可以在b.cpp的代码中声明和调用Try类型的对象了。

扩展资料

c++程序里使用多个cpp和h文件:

建立一个工程,里面有三个文件hello.hpp、hello.cpp、main.cpp

// hello.hpp

#ifndef HELLO_HPP

#define HELLO_HPP

class Hello

{

public:

void show() const

}

#endif

====================

// hello.cpp

#include "hello.hpp"

#include <iostream>

using std::cout

using std::endl

void Hello::show() const

{

cout << "Hello World" << endl

}

====================

// main.cpp

#include "hello.hpp"

int main()

{

Hello hello

hello.show()

return 0

}

参考资料来源:百度百科 - C++

百度百科 - cpp (一种计算机编程语言)

// 电话本Dlg.cpp : 实现文件

//

#include stdafx.h

#include 电话本.h

#include 电话本Dlg.h

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

// C电话本Dlg 对话框

C电话本Dlg::C电话本Dlg(CWnd* pParent /*=NULL*/)

: CDialog(C电话本Dlg::IDD, pParent)

{

m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME)

}

void C电话本Dlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX)

}

BEGIN_MESSAGE_MAP(C电话本Dlg, CDialog)

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_EN_CHANGE(IDC_EDIT1, C电话本Dlg::OnName)

ON_EN_CHANGE(IDC_EDIT2, C电话本Dlg::OnPhoto)

ON_EN_CHANGE(IDC_EDIT3, C电话本Dlg::OnAddress)

ON_EN_CHANGE(IDC_EDIT4, C电话本Dlg::OnShow)

ON_BN_CLICKED(IDC_BUTTON1, C电话本Dlg::OnFill)

ON_BN_CLICKED(IDC_BUTTON2, C电话本Dlg::OnInsert)

ON_BN_CLICKED(IDC_BUTTON3, C电话本Dlg::OnFind)

ON_BN_CLICKED(IDC_BUTTON4, C电话本Dlg::OnDelete)

ON_BN_CLICKED(IDC_BUTTON5, C电话本Dlg::OnEdit)

ON_BN_CLICKED(IDC_BUTTON7, C电话本Dlg::OnSave)

END_MESSAGE_MAP()

// C电话本Dlg 消息处理程序

BOOL C电话本Dlg::OnInitDialog()

{

CDialog::OnInitDialog()

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动

// 执行此 *** 作

SetIcon(m_hIcon, TRUE) // 设置大图标

SetIcon(m_hIcon, FALSE) // 设置小图标

// TODO: 在此添加额外的初始化代码

ifstream InFile(Wab.fsd,ios::in)

listWabList::iterator ItWab

char Tmp1[8],Tmp2[16],Tmp3[32]

Wab.clear()

while(InFile Tmp1 Tmp2 Tmp3)

{

OutWab.Name=Tmp1

OutWab.Photo=Tmp2

OutWab.Address=Tmp3

Wab.push_front(OutWab)

}

C电话本Dlg::OnFill()

return TRUE // 除非将焦点设置到控件,否则返回 TRUE

}

// 如果向对话框添加最小化按钮,则需要下面的代码

// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,

// 这将由框架自动完成。

void C电话本Dlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this)// 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_castWPARAM(dc.GetSafeHdc()), 0)

// 使图标在工作矩形中居中

int cxIcon = GetSystemMetrics(SM_CXICON)

int cyIcon = GetSystemMetrics(SM_CYICON)

CRect rect

GetClientRect(rect)

int x = (rect.Width() - cxIcon 1) / 2

int y = (rect.Height() - cyIcon 1) / 2

// 绘制图标

dc.DrawIcon(x, y, m_hIcon)

}

else

{

CDialog::OnPaint()

}

}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。

//

HCURSOR C电话本Dlg::OnQueryDragIcon()

{

return static_castHCURSOR(m_hIcon)

}

void C电话本Dlg::OnName()

{

CEdit *pMaxLen=(CEdit*)GetDlgItem(IDC_EDIT1)

pMaxLen-SetLimitText(6)

GetDlgItemText(IDC_EDIT1,InWab.Name)

}

void C电话本Dlg::OnPhoto()

{

CEdit *pMaxLen=(CEdit*)GetDlgItem(IDC_EDIT2)

pMaxLen-SetLimitText(11)

GetDlgItemText(IDC_EDIT2,InWab.Photo)

}

void C电话本Dlg::OnAddress()

{

CEdit *pMaxLen=(CEdit*)GetDlgItem(IDC_EDIT3)

pMaxLen-SetLimitText(30)

GetDlgItemText(IDC_EDIT3,InWab.Address)

}

void C电话本Dlg::OnShow()

{

// TODO: 如果该控件是 RICHEDIT 控件,则它将不会

// 发送该通知,除非重写 CDialog::OnInitDialog()

// 函数并调用 CRichEditCtrl().SetEventMask(),

// 同时将 ENM_CHANGE 标志“或”运算到掩码中。

// TODO: 在此添加控件通知处理程序代码

}

void C电话本Dlg::OnFill()

{

CString OutAll,OutTemp,Space,Enter

Space=_T( )

Enter=_T(\r\n)

listWabList::iterator ItWab

for(ItWab=Wab.begin()ItWab!=Wab.end()ItWab )

{

OutWab=*ItWab

OutTemp=OutWab.Name Space OutWab.Photo Space OutWab.Address

OutAll=OutAll OutTemp Enter

}

SetDlgItemText(IDC_EDIT4,OutAll)

}

void C电话本Dlg::OnInsert()

{

Wab.push_front(InWab)

C电话本Dlg::OnFill()

}

void C电话本Dlg::OnFind()

{

CString OutAll,OutTemp,Space,Enter

Space=_T( )

Enter=_T(\r\n)

listWabList::iterator ItWab

for(ItWab=Wab.begin()ItWab!=Wab.end()ItWab )

{

if(ItWab-Name==InWab.Name)

{

OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address

OutAll=OutAll OutTemp Enter

}

}

SetDlgItemText(IDC_EDIT4,OutAll)

}

void C电话本Dlg::OnDelete()

{

CString OutAll,OutTemp,Space,Enter

Space=_T( )

Enter=_T(\r\n)

listWabList::iterator ItWab

for(ItWab=Wab.begin()ItWab!=Wab.end()ItWab )

{

if(ItWab-Name==InWab.Name)

{

OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address

OutAll=OutAll OutTemp Enter

break

}

}

SetDlgItemText(IDC_EDIT4,OutAll)

if(ItWab!=Wab.end()) Wab.erase(ItWab)

}

void C电话本Dlg::OnEdit()

{

CString OutAll,OutTemp,Space,Enter

Space=_T( )

Enter=_T(\r\n)

listWabList::iterator ItWab

for(ItWab=Wab.begin()ItWab!=Wab.end()ItWab )

{

if(ItWab-Name==InWab.Name)

{

OutTemp=ItWab-Name Space ItWab-Photo Space ItWab-Address

OutAll=OutAll OutTemp Enter

break

}

}

SetDlgItemText(IDC_EDIT4,OutAll)

if(ItWab!=Wab.end())

{

Wab.erase(ItWab)

Wab.push_front(InWab)

}

}

void C电话本Dlg::OnSave()

{

CString Tmp1,Tmp2,Tmp3

ofstream OutFile(Wab.fsd,ios::out)

listWabList::iterator ItWab

for(ItWab=Wab.begin()ItWab!=Wab.end()ItWab )

{

Tmp1=ItWab-Name

Tmp2=ItWab-Photo

Tmp3=ItWab-Address

OutFile Tmp1 ' ' Tmp2 ' ' Tmp3 endl

}

}

只是个用C语言编写的电话本程序 很有实用意义

一般来说的办法就是怎么想让第二次运行知道已经有程序在运行了,或者说怎么能通知第二个程序已经有文件在运行了

例如程序运行后如果程序运行目录没有文件a.txt,就在程序运行目录新建一个文件a.txt,关闭的时候删除,这样第二次运行发现已存在了这个文件,说明程序已经在运行,故第二次运行直接退出

例如第一个运行程序用系统函数在本地监听一个socket端口,第二次运行程序发现这个端口已经被占用或者能连接,就知道已经有程序在运行了(例如smplayer就这样搞的)

例如第一个运行的程序在注册表某个地方写入一个1,退出时写入0,第二次运行的程序发现注册表这个地方是1就退出,如果是0就可以继续运行了,也就是其实是第一次运行

反正无论什么办法,具体要看你觉得怎么样合适才行的呢。还可以去找系统的进程列表,还可以测试某些环境变量啊,反正方法是很多的是死的,人是活的。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7844788.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存