zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    HearthBuddy投降插件2019-11-01的使用
    正则表达式在线分析 regex online analyzer
    Tips to write better Conditionals in JavaScript
    The fileSyncDll.ps1 is not digitally signed. You cannot run this script on the current system.
    Cannot capture jmeter traffic in fiddler
    JMETER + POST + anti-forgery token
    input type color
    HearthBuddy修改系统时间
    What are all the possible values for HTTP “Content-Type” header?
    UDK性能优化
  • 原文地址:https://www.cnblogs.com/chengmf/p/15055222.html
Copyright © 2011-2022 走看看