创建文件夹
#include<iostream>
using namespace std;
int main(){
cout<<"THis is C++ program Process!"<<endl;
}
编译执行命令:
g++ test.cpp -o test
实际上,上述的命令包含了如下的四个过程:
1. 预处理
g++ -E test.cpp -o test.i
其中:test.i文件内容
# 1 "test.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "test.cpp"
# 1 "/usr/include/c++/5/iostream" 1 3
# 36 "/usr/include/c++/5/iostream" 3
# 37 "/usr/include/c++/5/iostream" 3
# 1 "/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h" 1 3
# 194 "/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h" 3
# 194 "/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h" 3
namespace std
{
typedef long unsigned int size_t;
typedef long int ptrdiff_t;
}
2.编译:
g++ -S test.i -o test.s
test.s文件内容
3.汇编:
g++ -c test.s -o test.o
4.链接:
g++ test.o -o test
g++编译参数
man gcc #查看gcc命令手册
Cmake
宏定义:
头文件的本质:
if endf 编译的时候禁用还是使用代码
头文件:
- #pragma once
表示只包含一次,防止头文件被重包含。
2.头文件保护符 #ifndef _LOG_H
#define _LOG_H
#endif
防止头文件被重包含。
类成员
#include<iostream>
#include<vector>
using namespace std;
class example
{
public:
example()
{
cout<<"example!"<<endl;
}
example(int a)
{
cout<<"example!"<<a<<endl;
}
};
class Enity
{
public:
example m_value;
Enity():m_value(example(8))
{
}
};
int main(){
Enity e;
}
模板:
#include<iostream>
#include<vector>
using namespace std;
template<typename T>
void printTemplate(T value){
cout << value << endl;
}
class Base
{
public:
virtual void getClassName()
{
cout<<"Base Class"<<endl;
}
};
class Second:public Base
{
public:
void getClassName()
{
cout<<"Second Class!"<<endl;
}
};
namespace orange{
void print()
{
cout<<"ornage!"<<endl;
}
}
namespace apple{
namespace fruit {
void print()
{
cout<<"apple!"<<endl;
}
}
}
struct vertex{
float x,y,z;
};
int main(){
//Base b;
//b.getClassName();
//Second sec;
//sec.getClassName();
Base *sec = new Second();
//Base c = sec;
sec->getClassName();
delete sec;
//using namespace apple;
//using namespace fruit;
apple::fruit::print();
// print();
vector<vertex> ver;
ver.push_back({1,2,3});
ver.push_back({4,5,6});
for(int i = 0;i < ver.size();i++){
//cout << ver[i] << endl;
}
const char *a = "hello world!";
int b =3;
printTemplate(3);
}
内存分配:
宏定义
#define Log(x) cout<< x << endl;
#define MAIN int main() \
{\
Log("hello world!");\
}
MAIN
vecto迭代器
vector<string> strings;
strings.push_back("apple");
strings.push_back("orange");
for(vector<string>::iterator it = strings.begin();it != strings.end();it++){
cout<< *it <<endl;
}
函数指针
传入函数指针
使用函数指针调用函数
#include<iostream>
#include<vector>
//#include<array>
using namespace std;
#define Log(x) cout<< x << endl;
void print(int value)
{
cout<<"values:"<<value<<endl;
}
void foreach(vector<int> values,void(*func)(int)){
for(int i = 0;i < values.size();i++)
func(values[i]);
}
int main(){
// array<int,6> arr;
// arr[0] = 1;
// arr[1] = 2;
// cout<<arr[1]<<endl;*/
vector<int> valueArr;
valueArr.push_back(1);
valueArr.push_back(2);
valueArr.push_back(3);
// = {1,2,3,4};
foreach(valueArr,print);
}
使用lamdba表达式
#include<iostream>
#include<vector>
//#include<array>
using namespace std;
#define Log(x) cout<< x << endl;
void print(int value)
{
cout<<"values:"<<value<<endl;
}
void foreach(vector<int> values,void(*func)(int)){
for(int i = 0;i < values.size();i++)
func(values[i]);
}
int main(){
// array<int,6> arr;
// arr[0] = 1;
// arr[1] = 2;
// cout<<arr[1]<<endl;*/
vector<int> valueArr;
valueArr.push_back(1);
valueArr.push_back(2);
valueArr.push_back(3);
// = {1,2,3,4};
//foreach(valueArr,print);
foreach(valueArr,[](int calue){cout<<"valueArr:"<<value<<endl;});
}