• c++的一些杂项


    /**
        cwl:
        内容:c++非面向对象的一些杂项总结
            1, c++转换函数
    
    */
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    class Fraction
    {
    public:
        Fraction(int num, int den = 1)
            :m_numberator(num), m_denominator(den) {}
        operator double() const {
            return (double)((m_numberator * 1.0) / m_denominator);
        }
    
        Fraction operator + (const Fraction &f) {
            ///...
            return Fraction(0);
        }
    
    private:
        int m_numberator;   ///分子
        int m_denominator;  ///分母
    };
    
    template<typename T>
    void show(const T& firstArg)
    {
        cout << firstArg << endl;
    }
    
    template<typename T, typename... Types>
    void show(const T& firstArg, const Types&... args)
    {
        cout << firstArg << endl;
        show(args...);
    }
    
    class A
    {
    public:
        void show() { cout << "A" << endl; }
    };
    
    class B: public A
    {
    public:
        void show() { cout << "B" << endl; }
    };
    
    int main()
    {
        ///【1】转换函数
        Fraction a = 3;
        printf("%f
    ", (double)a);
        /**
        operator double() const {
            return (double)((m_numberator * 1.0) / m_denominator);
        }
        */
    
        ///【2】
        /**
        explicit Fraction(int num, int den = 1)
            :m_numberator(num), m_denominator(den) {}
        explicit避免构造函数在这个部分隐式转换
        */
    
        ///【3】智能指针,一个像指针的类
        /**
    
        【第一类智能指针】
            template<class T>
            class Shared_ptr
            {
            public:
                T& operator*() const
                { return *px; }
    
                T& operator->() const
                { return px; }
    
                Shared_ptr(T* p):px(p) {}
    
            private:
                T* px;
                long *pn;
            };
            //注意这里为了清晰度没有写delete部分
            //    Shared_ptr<int>p = new int;
            //    *p = 1;
    
         【第二类迭代器】
            对指针重载++ --
    
        */
    
        /**
            【4】仿函数
            设计一个类,行为像函数,重载()即可
            class Test {
    
                void operator () () {
                    ///...
                }
            }
        */
    
        /**
            【5】
            模板可变参数
    
            template<typename T>
            void show(const T& firstArg)
            {
                cout << firstArg << endl;
            }
    
            template<typename T, typename... Types>
            void show(const T& firstArg, const Types&... args)
            {
                cout << firstArg << endl;
                show(args...);
            }
        */
        ///show(1, 3, 4, 5);
    
        /**
            因为泛型的原因c++11重写定义了auto。动态绑定类型
    
            另一中拆包方式
    
            // 编译这个代码需要开启 -std=c++14
            // 因为版本原因,实验环境中的 g++ 尚不支持此特性,此处可以使用 clang++ 替代 g++
            template<typename T, typename... Args>
            auto print(T value, Args... args) {
                std::cout << value << std::endl;
                return std::initializer_list<T>{([&] {
                    std::cout << args << std::endl;
                }(), value)...};
            }
            int main() {
                print(1, 2.1, "123");
                return 0;
            }
    
        */
    
        ///【5】子类调用父类函数
        B class_b;
        class_b.A::show();  ///子类中调用父类方法
    
    
        return 0;
    }
    
  • 相关阅读:
    Git衍合和合并区别
    Git开发流程
    AJAX用户注册演示程序
    PHP常用MySql操作
    轻描淡写
    浅谈web后门隐藏与检测思路
    PHP代码审计和漏洞挖掘的一点思考
    Android Split的用法
    Android 动态显示时间
    Java 获取字符长度
  • 原文地址:https://www.cnblogs.com/Q1143316492/p/10386492.html
Copyright © 2020-2023  润新知