㈠ 類的內聯函數的實現應該放在哪裡
�0�2�0�2�0�2 今天公司研發部舉行會議,討論執行代碼審查事宜。在討論到一條:頭文件不能放函數實現代碼,我提出異議:內聯函數應該例外。同事反駁說:內聯函數的實現也可放進cpp文件。我擺出我的理由:如果是類的內部使用該類的內聯函數,函數實現放哪都行(頭文件和cpp文件都可以);但是如果外部調用類的內聯函數同時該函數的實現又是放在cpp中,那會出現錯誤。同事於是問我會出現錯誤,當時我也沒答上來。於是大家就先略過再去討論其它方面。 �0�2�0�2�0�2�0�2�0�2 晚上回去寫代碼測試一下,如果把內聯函數的實現放在cpp文件而外部又調用這個函數的話,確實會出現這個函數無法識別的錯誤。測試辦法如下:�0�2�0�2�0�2 新建一個CTest類,在頭文件這樣聲明:class CTest{public:�0�2�0�2�0�2 CTest(void);
�0�2�0�2�0�2 ~CTest(void);
�0�2�0�2�0�2 inline int GetValue();
};在cpp文件這樣實現:#include "test.h"
CTest::CTest(void){}CTest::~CTest(void){}inline int CTest::GetValue(){�0�2�0�2�0�2 return 0;
} 然後在main函數這樣調用:#include "test.h"
int main( ){�0�2�0�2�0�2 CTest test;
�0�2�0�2�0�2 test.GetValue();
�0�2�0�2�0�2 getchar();
}不出意外的話應該會出現下面的鏈接錯誤:1>TestSort.obj : error LNK2019: unresolved external symbol "public: int __thiscall CTest::GetValue(void)" (?GetValue@CTest@@QAEHXZ) referenced in function _main
1> F:/MyTest/MyTest/src/Debug/TestSort.exe : fatal error LNK1120: 1 unresolved externals要解決這個錯誤,需要把CTest類的GetValue函數放回CTest類的頭文件。如下:// test.h
#pragma once
class CTest{public:�0�2�0�2�0�2 CTest(void);
�0�2�0�2�0�2 ~CTest(void);
�0�2�0�2�0�2 int GetValue()
�0�2�0�2�0�2 {
�0�2�0�2�0�2�0�2�0�2�0�2�0�2 return 0;
�0�2�0�2�0�2 }
}; 或者是這樣:// test.h
#pragma once
class CTest{public:�0�2�0�2�0�2 CTest(void);
�0�2�0�2�0�2 ~CTest(void);
} �0�2�0�2�0�2 《高質量C++編程》的作者林銳博士推薦後一種做法,認為後者是一種良好的編程風格。
㈡ 類函數的實現在類里嗎
通常分開實現,這樣便於介面與實現分開,因為你可能不願意把你的核心代碼暴露給使用者。例如:(你拿去試試吧,不明白hi我)
聲明在頭文件中,如a.h
實現在cpp文件中,如a.cpp
測試用的主文件test.cpp
// a.h
#ifndef A_H
#define A_H
class A
{
public:
A();
~A();
void display(void);
int m1;
int m2;
};
#endif
// a.cpp文件
#include "a.h" // 包含頭文件
#include<iostream>
using namespace std;
A::A():m1(0),m2(0){} // 構造函數實現
void A::display(void){ // display成員函數實現
cout << "m1 = " << m1 <<"\nm2 = " << m2 <<endl;
}
A::~A(){} // 析構函數實現
// test.cpp
#include "a.h"
void main()
{
A a;
a.display();
}
輸出:
m1 = 0
m2 = 0
㈢ C++ 點H文件可以寫函數具體實現嗎
可以啊,但是那不是一個很好的習慣。
不過比如內聯、模板之類的通常你都必須寫在.h中,特殊情況除外啊。
㈣ c語言能不能在一個文件中寫一個函數,然後再另一個文件中調用
當然可以啦。x0dx0a舉個例子吧:兩個文件 main.c function.cx0dx0a我們在function.c 中寫一個函數 func();x0dx0a與此同時,我們需要寫一個.h文件來聲明這個函數,即function.hx0dx0a// 以下是function.h 的內容x0dx0a#ifndef __FUNCTION_H__x0dx0a#define __FUNCTION_H__x0dx0ax0dx0avoid func();x0dx0a#endifx0dx0ax0dx0a// 以下是function.c 的內容x0dx0a#include "function.h"x0dx0ax0dx0avoid func()x0dx0a{x0dx0a // do somethingx0dx0ax0dx0a}x0dx0ax0dx0a這樣一來,我們想要在另外一個文件,也就是main.c 中調用這個函數的時候,只需要包含它對應的頭文件,就可以直接調用了。x0dx0a// 以下是main.c 的內容x0dx0a#include "stdio.h"x0dx0a#include "function.h"x0dx0ax0dx0aint main()x0dx0a{x0dx0a func();x0dx0ax0dx0a return 0;x0dx0a}
㈤ C語言中,如何把一個函數的結果存放在文本文件中,並且不寫在主程序內
看了你和別人的交流 直接上個代碼吧
folatfun(floatx);
floata,b;
main(){
scanf("輸入x",&a);
b=fun(a);
printf("x=%f",b);}
floatfun(floatx){
floatret;
FILE*fp;
if(x<-1)ret=x;
if(x>=-1)ret=x*2;
fp=fopen("result.txt","w");
fprintf(fp,"x=%f",ret);
returnret;
}
這樣就是你要求的了
主函數不變 在fun中返回同時輸入到文件 然後主函數正常輸出
㈥ c++ 怎麼把子函數寫在獨立文件中
1 可以通過頭文件來實現
具體是把函數的聲明寫在頭文件(.h)里
函數的定義寫在源文件(.cpp)里
在要使用該函數的源文件中 使用#include "含有該函數的頭文件" 來引入進而使用
2 一個小示例來說明
該示例包含3個文件,分別是Source.cpp、Funs.h和Funs.cpp
//Source.cpp文件
#include"Funs.h"
#include<stdio.h>
intmain(){
inta=12,b=9;
intc=max(a,9);
printf("%d和%d中的最大值為:%d ",a,b,c);
getchar();
return0;
}
//Funs.h文件
#ifndefFUNS_H
#defineFUNS_H
/*求兩個數的最大值函數*/
intmax(int,int);
#endif
//Funs.cpp文件
/*求兩個數的最大值函數*/
intmax(inta,intb){
returna>b?a:b;
}
3 運行結果如下
㈦ c語言怎麼將數據寫入文件
可以使用C語言中的文件操作函數,將數據寫入文件。具體如下
一、打開文件。
使用fopen函數。格式為:
FILE *fopen(const char *name, const char * mode);
其中name為要寫入的文件名,mode為格式字元。要寫入文件,mode可以是:
1、 "w" 只寫方式,文本形式輸入;
2、"wb" 只寫方式,二進制形式輸入;
3、"wb+" 讀寫方式,二進制形式輸入;
4、"w+" 讀寫方式,文本形式輸入;
5、"a" 追加方式,寫入文件結尾,文本形式輸入;
6、"ab" 追加方式,寫入文件結尾,二進制形式輸入;
7、"ab+" 追加方式,可讀寫,寫入文件結尾,二進制形式輸入;
8、"a+" 追加方式,可讀寫,寫入文件結尾,文本形式輸入;
二、寫入數據。
可以使用各種寫入函數,向文件寫入。 如打開的文件指針為fp,可以使用如下函數:
1、 fputc, 寫入一個字元。聲明為:
int fputc(int ch, FILE *fp);
2、fputs, 寫入一個字元串,聲明為:
char * fputs(const char *str, FILE *fp);
3、fprintf,格式化寫入,功能和printf類似。 聲明為:
int fprintf(FILE *fp, const char *fmt, ...);
4、 fwirte, 按塊寫入二進制數據,聲明為:
int fwirte(char *buf, int block_size, int block_number, FILE *fp);
三、寫入完畢後,調用fclose關閉文件:
int fclose(FILE *fp);
㈧ c語言能不能在一個文件中寫一個函數,然後再另一個文件中調用
當然可以啦。
舉個例子吧:兩個文件 main.c function.c
我們在function.c 中寫一個函數 func();
與此同時,我們需要寫一個.h文件來聲明這個函數,即function.h
// 以下是function.h 的內容
#ifndef __FUNCTION_H__
#define __FUNCTION_H__
void func();
#endif
// 以下是function.c 的內容
#include "function.h"
void func()
{
// do something
}
這樣一來,我們想要在另外一個文件,也就是main.c 中調用這個函數的時候,只需要包含它對應的頭文件,就可以直接調用了。
// 以下是main.c 的內容
#include "stdio.h"
#include "function.h"
int main()
{
func();
return 0;
}
㈨ 函數實現代碼可以寫在頭文件中嗎
一般來說頭文件是用來聲明,cpp是實現,如果什麼沒變,實現變了,依賴這個類的地方就不用重新編譯了。
還有如果是聲明和定義都寫在一起,編譯器默認認為它是inline,生成的2進制代碼比較多
㈩ python 如何讓一個函數的輸出寫入到一個文件中
首先導入sys模塊
import sys
然後在打算把輸出數據寫入文件的代碼之前加上以下代碼
output=sys.stdout
outputfile=open(filename,'w')
sys.stdout=outputfile
上面的filename表示輸出文件
程序結束或恢復成正常輸出時加上以下代碼
outputfile.close()
sys.stdout=output
恢復輸出為開始保存的正常輸出值