1. 程式人生 > >C++中對於類來說標頭檔案(.h)和原始檔(.cpp)都應該寫些什麼 (類的常規建立)

C++中對於類來說標頭檔案(.h)和原始檔(.cpp)都應該寫些什麼 (類的常規建立)

    寫類的宣告(包括類裡面的成員和方法的宣告)、函式原型、#define常數等,但一般來說不寫出具體的實現。

    在寫標頭檔案時需要注意,在開頭和結尾處必須按照如下樣式加上預編譯語句(如下):

#ifndef CIRCLE_H
#define CIRCLE_H

//你的程式碼寫在這裡

#endif

    這樣做是為了防止重複編譯,不這樣做就有可能出錯。

    至於CIRCLE_H這個名字實際上是無所謂的,你叫什麼都行,只要符合規範都行。原則上來說,非常建議把它寫成這種形式,因為比較容易和標頭檔案的名字對應。

   原始檔(.cpp):

    原始檔主要寫實現標頭檔案中已經宣告的那些函式的具體程式碼。需要注意的是,開頭必須#include一下實現的標頭檔案,以及要用到的標頭檔案。

那麼當你需要用到自己寫的標頭檔案中的類時,只需要#include進來就行了。

    下面舉個最簡單的例子來描述一下,咱就求個圓面積。

     第1步,建立一個空工程(以在VS2003環境下為例)。

     第2步,在標頭檔案的資料夾裡新建一個名為Circle.h的標頭檔案,它的內容如下:

#ifndef CIRCLE_H
#define CIRCLE_H

class Circle
{
private:
    
double r;//半徑
public:
    Circle();
//建構函式
    Circle(double R);//建構函式
double Area();//求面積函式
}
;

#endif

   注意到開頭結尾的預編譯語句。在標頭檔案裡,並不寫出函式的具體實現。

    第3步,要給出Circle類的具體實現,因此,在原始檔夾裡新建一個Circle.cpp的檔案,它的內容如下:

#include "Circle.h"

Circle::Circle()
{
    
this->r=5.0;
}


Circle::Circle(
double R)
{
    
this->r=R;
}


double Circle:: Area()
{
    
return3.14*r*r;
}

    需要注意的是:開頭處包含了Circle.h,事實上,只要此cpp檔案用到的檔案,都要包含進來!這個檔案的名字其實不一定要叫Circle.cpp,但非常建議cpp檔案與標頭檔案相對應。

    最後,我們建一個main.cpp來測試我們寫的Circle類,它的內容如下:

#include <iostream>
#include 
"Circle.h"
usingnamespace std;

int main()
{
    Circle c(
3);
    cout
<<"Area="<<c.Area()<<endl;
    
return1;
}

    注意到開頭時有#include "Circle.h"的宣告,證明我們使用到了我們剛才寫的Circle類。

   至此,我們工程的結構為:

    執行一下,輸出結果為:

   說明我們寫的Circle類確實可以用了。

相關推薦

c++的預編譯檔案問題

環境:VS2008 語言:C++      下午出了一個非常可惡的問題,我的一個基於MFC 對話方塊的程式因為預編譯標頭檔案stdafx.h的原因始終無法編譯通過。 由於程式整體是需要預編譯標頭檔案的。因此工程內所有cpp檔案通通都包括了#include stdafx.h。      我自己寫的檔案放在工程

ubuntu找不到檔案term.hcurses.h的解決方法

創建於 2012-05-16 收藏自個人的百度空間 -------------------------------- 當/usr/include中沒有term.h和curses.h時,包含這兩個標頭檔案的程式會如下報錯: term.h: 沒有那個檔案或目錄 curses.h

C++對於來說檔案.h原始檔.cpp應該什麼 常規建立

    寫類的宣告(包括類裡面的成員和方法的宣告)、函式原型、#define常數等,但一般來說不寫出具體的實現。     在寫標頭檔案時需要注意,在開頭和結尾處必須按照如下樣式加上預編譯語句(如下): #ifndef CIRCLE_H#define CIRCLE_H//你的程式碼寫在這裡#endif

c++兩個檔案互相包含編譯出錯的解決辦法

首先我們需要問一個問題是:為什麼兩個類不能互相包含標頭檔案? 所謂互相包含標頭檔案,我舉一個例子:我實現了兩個類:圖層類CLayer和符號類CSymbol,它們的大致關係是圖層裡包含有符號,符號裡定義一個相關圖層指標,具體請參考如下程式碼(注:以下程式碼僅供說明問題,不作為

C語言字串檔案string.h的strlen,strcat,strcpy,strncpy,strcmp,strlwr,strupr函式

前言 本博文內容基於VC6.0++, 2.本博文主要介紹包含在string.h中的幾個字串相關的函式; strlen(字串陣列名) 字串有效長度函式; 返回值:整型 功能:用來測量一個字串的有效長度(所謂有效,就是從字串中的第一個字元開始,一

C語言自帶的檔案(.h)所包含的函式

由於之前沒有好好學習過C語言,所以對其自帶標頭檔案所包含的內容總是不清楚,每次寫程式碼都是盲目的#include很多.h,現在重新整理一下,發現了不少很好的函式,以方便複習查閱。 不完全統計,C語言標

編寫一個可變引數的C函式——檔案stdarg.h巨集va_start ,va_argva_end的應用

我們在C語言程式設計中會遇到一些引數個數可變的函式,例如printf()這個函式,它的定義是這樣的:int printf( const char* format, ...);它除了有一個引數format固定以外,後面跟的引數的個數和型別是可變的,例如我們可以有以下不同的呼叫方

習題 8.5 將本章的例8.4改寫為一個多檔案的程式:1.將定義放在檔案arraymax.h;2.將成員函式定義放在原始檔arraymax.cpp;3.主函式放在原始檔file1.cpp

C++程式設計(第三版) 譚浩強 習題8.5 個人設計 習題 8.5 將本章的例8.4改寫為一個多檔案的程式: 1.將類定義放在標頭檔案arraymax.h中; 2.將成員函式定義放在

C語言檔案stdlib.h裡面有什麼函式

主要含有的內容方向: A.字串轉換 B. 隨機數 C.記憶體管理 D.與環境的介面 E.查詢與排序 F.整數運算 G.多位元組字元 … 友情連結: (1)關於 stdio.h 和 stdlib.h 包含的函式 https://blogG…csdn.net/weixin_42513339/

檔案的巨集定義 檔案的巨集定義

標頭檔案中的巨集定義     程式碼: 1 #ifndef DSP_ADC_BSP_H_ //防止標頭檔案被重複包含 2 #define DSP_ADC_BSP_H_ 3 4 #ifdef _DSP_

通過檔案 time.h的介面獲取系統當前時間的方法

#include <time.h> 82 struct tm *t; 83 time_t tt; 84 time_t ts; 85 86 struct tm tr = {0}; 87

宣告檔案實現檔案的使用檔案檔案放在一起的時候應該注意的問題

#include<iostream> using namespace std; class v { public:     void volume()     {         int vo;         cin>>length>>w

FFmpeg(2.4.4)關於影象格式的檔案 -- pixfmt.h

<span style="font-size:18px;">/* * copyright (c) 2006 Michael Niedermayer <[email protected]> * * This file is part of FFmpeg.

eclipse C開發新增自己的檔案搜尋路徑

clipse編譯C程式時提示: ..\src\main.c:8:21: fatal error: my_type.h: No such file or directory 如圖: 需要新增自己的標頭檔案的路徑: 選中工程再右鍵點選,選擇右鍵選單的Prope

VS2012如何在解決方案包含預設的檔案目錄

大家安裝完vs2012後,最讓人困惑的是原先的解決方案中包含預設標頭檔案不知道跑哪去了。只能在每個專案屬性中新增,這樣是很麻煩的。 那vs2012應該如何新增啦,步驟如下:        1.新建一個解決方案。        2.檢視---->屬性管理        

c/c++ _c語言模組_檔案_原始檔_檔案搜尋路徑

標頭檔案 為什麼會有標頭檔案; 怎麼製作標頭檔案; 我們的編譯器是怎麼找到標頭檔案; 模組:有組織有結構的來給程式碼劃分模組,處理同一個功能程式碼,我們放到一個模組裡面,.c檔案 假設我們新增一個數學函式原始檔,並且新增到編輯器

CTime檔案以及輸出當前時間

       #include<iostream> #include<atltime.h> using namespace std; int main() { CTime time = CTime::GetCurrentTime(); CString date = time.For

VS關於預編譯檔案的介紹

預編譯標頭檔案的原理: 在DXUT.cpp裡include一次DXUT.h,生成一次pch,pdb檔案,其他地方實際上直接用這個編譯的結果,從而減少編譯時間,提高編譯效率。一般,我們把常用的不變的庫標頭檔案放裡面,如,atlbase.h,atlcore.h,window

c語言檔案time.h

#include <stdio.h> #include <time.h> void main() { time_t sec; //typedef long time_t struct tm * curTime; sec = ti

GCC使用預編譯檔案

既使用過 Microsoft? Visual C++? 又使用過 GNU CC 的網友一定會感受到兩者編譯速度的差異,尤其是對於 wxWidgets 這樣標頭檔案內容多