C++一些例子
虚析构
#include<iostream>
class Base
{
public:
Base() { std::cout << "base 构造" << std::endl; }
virtual~Base() { std::cout << "base 析构" << std::endl; }
};
class Derived : public Base
{
public:
Derived() { std::cout << "derived 构造" << std::endl; }
~Derived() { std::cout << "derived 析构" << std::endl; }
};
int main()
{
Base* base = new Base();
delete base;
std::cout << "--------------" << std::endl;
Derived* der = new Derived();
delete der;
std::cout << "--------------" << std::endl;
Base* p = new Derived();
delete p;
std::cin.get();
}
联合体
#include<iostream>
struct Vector1
{
float x, y;
};
struct Vector2
{
union
{
struct
{
float x, y, z, w;
};
struct
{
Vector1 a, b;
};
};
};
void PrintVector(const Vector1& vector)
{
std::cout << vector.x << " " << vector.y << std::endl;
}
int main()
{
Vector2 vector = { 1.0f,2.0f,3.0f,4.0f };
PrintVector(vector.a);
PrintVector(vector.b);
// 1 2 3 4
vector.z = 100.0f;
PrintVector(vector.a);
PrintVector(vector.b);
// 1 2 100 4
std::cin.get();
}
线程
#include<iostream>
#include<thread>
static bool Finished = false;
void DoWorker()
{
using namespace std::literals::chrono_literals;
std::cout << "id: " << std::this_thread::get_id() << std::endl;
while (!Finished)
{
std::cout << "Working...." << std::endl;
std::this_thread::sleep_for(1s);
//std::cin.get()
}
}
int main()
{
std::thread worker(DoWorker);
std::cin.get();
Finished = true;
worker.join();
std::cin.get();
}
预处理
#if _DEBUG==1
#define LOG(x) cout<<x<<endl
#elif(_RELESE)
#define LOG(x)
#endif
重载操作符
class Vector1
{
public:
float x, y;
public:
Vector1(float X, float Y)
: x(X), y(Y)
{
Vector1* const &e = this;
}
Vector1 Add(const Vector1& other)const
{
return Vector1(x + other.x, y + other.y);
}
Vector1 operator+(const Vector1& other)const
{
return Add(other);
}
Vector1 Multiply(const Vector1& other)const
{
return Vector1(x * other.x, y * other.y);
}
Vector1 operator*(const Vector1& other)const
{
return Multiply(other);
}
bool operator==(const Vector1& other)const
{
return x == other.x && y == other.y;
}
bool operator!=(const Vector1& other)const
{
return !(*this == other);
}
};
std::ostream& operator<<(ostream& stream, const Vector1& other)
{
stream << other.x << "," << other.y;
return stream;
}
int main()
{
Vector1 v1(1.1f, 2.2f);
Vector1 v2(3.3f, 4.4f);
Vector1 result1 = v1 + v2;
Vector1 result2 = v1 * v2;
cout << result1 << endl;
cout << result2 << endl;
if (result1 != result2)
cout << "==" << endl;
else
cout << "!=" << endl;
cin.get();
}
智能指针
class Entity
{
};
{
shared_ptr<Entity>weakEneity;
{
unique_ptr<Entity>entity = make_unique<Entity>();
shared_ptr<Entity>sharedEntity = make_shared<Entity>();
weakEneity = sharedEntity;
entity->print();
}
}
lambda
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
void Foreach(const vector<int>& v,const function<void(int)>&func)
{
for (int i : v)
{
func(i);
}
}
int main()
{
vector<int>v = { 1,2,3,4 };
auto it = find_if(v.begin(), v.end(), [](int val){ return val > 2; });
cout << *it << endl;
auto lambda = [=](int val) {cout << val << endl; };
Foreach(v, lambda);
cin.get();
}
函数指针
void Println(int val)
{
cout << val << endl;
}
void Foreach(const vector<int>& v,void(*func)(int val))
{
for (int i : v)
{
func(i);
}
}
int main()
{
vector<int>v = { 1,2,3,4 };
Foreach(v, Println);
}
void Foreach(const vector<int>& v,void(*func)(int val))
{
for (int i : v)
{
func(i);
}
}
int main()
{
vector<int>v = { 1,2,3,4 };
Foreach(v, [](int val)
{
cout << val << endl;
});
}
使用箭头运算符,来获取内存中某个值的偏移量
#include<iostream>
using namespace std;
struct Vector
{
int x, y, z;
};
int main()
{
int offset = (int)&((Vector*)nullptr)->x;
//x,y,z 执行结果分别是0,4,8
cout << offset << endl;
}
在不知道数组大小传递
template<int N>
void Array(const array<int,N>& arr)
{
for (int i = 0; i < arr.size(); i++)
{
cout << arr[i];
}
}
int main()
{
array<int, 10>arr = { 1,1,1,1,1 };
Array(arr);
}
C++一些例子的更多相关文章
- SQLServer地址搜索性能优化例子
这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- REGEX例子
作为REGEX的例子,代码9.3显示了一个给定的文件有多少行,具有给定的模式,通过命令行输入(注:有更有效率的方式来实现这个功能,如Unix下的grep命令,在这里只是给出了另一种方式).这个程序像下 ...
- CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子
CSharpGL(25)一个用raycast实现体渲染VolumeRender的例子 本文涉及的VolumeRendering相关的C#代码是从(https://github.com/toolchai ...
- 简单例子了解View的事件分发
什么是事件分发 我们在写自定义ViewGroup或者自定义View的时候经常要处理用户的点击事件,如果我们的View在最底层,他在很多ViewGroup里面,我们如何让我们的点击事件准确传递到View ...
- 简单的例子了解自定义ViewGroup(一)
在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...
- kqueue例子
网络服务器通常都使用epoll进行异步IO处理,而开发者通常使用mac,为了方便开发,我把自己的handy库移植到了mac平台上.移植过程中,网上居然没有搜到kqueue的使用例子,让我惊讶不已.为了 ...
- 今天有群友不是很清楚htm直接存数据库的危害,我简单举个例子
通过这个案例就知道为什么不要把原生的html放数据库了 常见的几种转码 常用的几种显示方法 只有原生html和最下面一种弹框了,变成了持久xss 如果是Ajax的方式,请用@Ajax.JavaS ...
- ElasticSearch 5学习(5)——第一个例子(很实用)
想要知道ElasticSearch是如何使用的,最快的方式就是通过一个简单的例子,第一个例子将会包括基本概念如索引.搜索.和聚合等,需求是关于公司管理员工的一些业务. 员工文档索引 业务首先需要存储员 ...
- 以实际的WebGIS例子探讨Nginx的简单配置
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 以实际项目中的一个例子来详细讲解Nginx中的一般配置,其中涉 ...
随机推荐
- win32-创建一个屏幕准星(UpdateLayeredWindow)
// Test_1.cpp : Defines the entry point for the application. // #include "framework.h" #in ...
- 以二进制文件安装K8S之环境准备
为了k8s集群能正常运行,需要先完成4项准备工作: 1.关闭防火墙 2.禁用SeLinux 3.关闭Swap 4.安装Docker 关闭防火墙 # 查看防火墙状态 getenforce #关闭防火墙, ...
- Kafka本地单实例安装
下载安装 从国内镜像站点下载并安装Kafka安装包,以下载并安装v3.2.3版本为例. $ tar -xzf kafka_2.12-3.2.3.tgz $ cd kafka_2.12-3.2.3 启动 ...
- 如何配置WebStorm开发Chrome插件项目
开发Chrome插件项目,在调用Chrome的相关接口时,默认情况下WebStorm是不会有任何提示的,这对于开发者特别是新手特别不友好. 因此,需要IDE能支持Chrome接口调用时的智能提示. 如 ...
- 麒麟系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.8.1,并配置编译测试Demo
前言 本篇紧接上一篇,上一篇已经从Qt源码编译了Qt,那么Qt开发的IDE为QtCreator,本篇从源码编译安装QtCreator,并配置好构建套件,运行Demo并测试. QtCreator ...
- 正则表达式re模块---day18
1.匹配单个字符 import re lst = re.findall(正则表达式,要匹配的字符串) 返回的是列表,按照正则表达式匹配到的内容都扔到列表中 # ### 1.预定义字符集 # \d 匹配 ...
- 【C# .Net】List循环add,出现数据相同现象? 引发对引用类型和值类型的底层逻辑的思考。
赶项目时发现了一个问题,定义一个引用对象,如果在循环外定义对象,在循环内list.add(object).最后的结果却是所有的对象值都是一样的,即每add一次,都会把之前的数据覆盖. 解决方法:把对象 ...
- 【Azure 应用服务】基于Azure的CI/CD工具链部署App Service
问题描述 在中国区Azure中,App Service是否支持CI/CD工具部署呢? Windows 和Linux两个系统都是同样的方法吗? 问题解答 目前中国区Azure支持Windows 和 Li ...
- 数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义?
数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义? 了解SOC 2与ISO 27001的区别,你就知道SOC 2对智能自动化厂商的意义了 文/王吉伟 要问当前组织对于数字化转型的最大顾虑 ...
- 国内RPA融资年终大盘点:19起投资总额破34亿估值近230亿,垂直落地之年开启
2021国内RPA融资年终盘点:15家厂商融资总额破34亿,估值近230亿 2021RPA融资年终大盘点:19起投资估值近230亿,垂直落地之年开启 2021国内RPA融资年终盘点:15家厂商19起投 ...