
以.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就可以继续运行了,也就是其实是第一次运行
反正无论什么办法,具体要看你觉得怎么样合适才行的呢。还可以去找系统的进程列表,还可以测试某些环境变量啊,反正方法是很多的是死的,人是活的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)