建電大社 [11]
by 鹽亞倫
不過看上週大家上課情形
今天就來講點不一樣的吧
先來講講下週的注意事項
請點選大社賽測機進行練習吧
submit按這裡
其實還沒
今天要用repl.it作為教學
請各位先上去建立一個新的專案
先來寫一個簡單的有struct和function的程式
#include <iostream>
using namespace std;
struct person{
double height;
double weight;
double BMI() {
return weight / (height * height);
}
person(double _h, double _w) : height(_h), weight(_w) { }
};
void printBMI(person& a) {
cout << a.BMI() << endl;
}
int main() {
person aaw(1.75, 60.0);
printBMI(aaw);
}
應該有人知道
函數有個東西叫做提前宣告吧
#include <iostream>
using namespace std;
struct person{
double height;
double weight;
double BMI() {
return weight / (height * height);
}
person(double _h, double _w) : height(_h), weight(_w) { }
};
void printBMI(person& a); // 先宣告
int main() {
person aaw(1.75, 60.0);
printBMI(aaw);
}
void printBMI(person& a){ // 再實作
cout << a.BMI() << endl;
}
在C++裡面,如果沒有先行宣告,main函數看不到在他後面的程式碼
應該有人知道
struct內的函式也可以先宣告事後實作吧
#include <iostream>
using namespace std;
struct person{
double height;
double weight;
double BMI(); // 先宣告
person(double _h, double _w); // 先宣告建構式
};
void printBMI(person& a); // 先宣告
int main() {
person aaw(1.75, 60.0);
printBMI(aaw);
}
// 再實作
double person::bmi(){
return weight / (height * height);
}
// 實作建構式
person::person(double _h, double _w) : height(_h), weight(_w) { }
void printBMI(person& a){ // 再實作
cout << a.BMI() << endl;
}
不過有沒有想過為什麼C++要有這種設計呢?
腦洞大開ing
假設我今天莫名其妙
想要有很多個 .cpp 檔案
該怎麼辦?
我有沒有辦法讓他們共用全域變數 & function & struct & class ???
似乎只要先宣告過就可以!!!
來試試看把printBMI的實作移到另一個cpp檔案中
在main.cpp裡面保留printBMI的宣告
在printBMI.cpp裡面保留person的宣告
啊不過假設我希望再把person裡面的函數獨立在一個person.cpp裡面
這樣person.cpp不就還要再複製一次
struct person的宣告嗎
複製那麼多次好麻煩喔
可不可以寫在一個地方再叫所有人去看他就好?
#include <iostream>
#include <string>
#include <vector>
#include <iostream>
#include "person.h"
其中,用<>的話代表是系統標頭檔
例如電腦
的/usr/bin/include中會有一個iostream.h
用 "" 的則是你自己寫的標頭檔
,要放在同一個目錄底下來寫一個person.h吧
#include <iostream>
using namespace std;
struct person{ // 留著person的宣告
double height;
double weight;
double BMI(); // 先宣告
person(double _h, double _w); // 先宣告建構式
};
void printBMI(person& a); // 留著printBMI的宣告
其他檔案只要#include"person.h"就好
你會發現
今天之所以要用repl
是因為 會自動幫你編譯執行
如果沒有repl或是codeblocks這些東西的話
要怎麼編譯檔案勒?
要用終端機指令啦哈哈
啊不過有些人的電腦
例如電教的
並沒有安裝 g++
先講點基本指令:
來講 g++ 了
要怎麼用g++來編譯勒?
g++ -std=c++14 -o OUTPUT_NAME.exe CPP_NAME.cpp
g++ CPP_NAME.cpp
簡單版:將CPP_NAME.cpp編譯成執行檔
執行檔檔名會是 a.out 或是 a.exe
./a.out
再用上面這個指令來執行
進階版:多指定一點東西
c++版本
執行檔檔名
g++ -o hahaha.exe main.cpp person.cpp printBMI.cpp
以剛剛為例
簡單吧?
不過,其實標頭檔與編譯還有許多東西可以講
歡迎來下週專案小社!!!