zoukankan      html  css  js  c++  java
  • c++ tricks

    1 关于virtual关键字的实验

    1.1 在派生类中改变virtual函数访问权限

    定义两个类A,B,其中B公有派生于A。A中定义一个private成员虚函数func,B中覆写此函数,但是将其访问权限设置为public

    class A{
    private:
        virtual void func(){
            printf("A
    ");
        }
    };
        
    class B
        : public A{
    public:
        void func(){
            printf("B
    ");
        }
        void do_func(){
            func();
        }
    };
    
    int main() {
        /* test-1
         * 编译报错,error: ‘virtual void A::func()’ is private
         * 分析:基类中virtual修饰函数的访问权限在派生类中最好不要改变,否则发挥多态性受到限制,对比 test-1 和 test-2
        **/
        A * b = new B;
          b->func();
    
        /* test-2
         * 编译,运行成功,
         * 输出:B
        **/
        B * b = new B;
        b->func();
    
        /* test-3
         * 编译,运行成功,
         * 输出:B
        **/
        A * b = new B;
        b->do_func();
    
        return 0;
    }

    2 枚举类

    现在有这样一种要求,构造的对象都基于既定的模板,不允许任意构造。比如新建一个人姓氏的类,但是姓氏是固定的,不允许随便构造新的姓氏,于是可以定义枚举类。将除了Family_Name(const char * name)以外的构造函数(拷贝,赋值)设为public。然后定义若干static Family_Name供用户使用。

    注: 枚举类不能为抽象类

    class Family_Name{
    private:
        Family_Name(const char * name)
            :name_(name){}
        const char * name_;
    public:
        Family_Name(const Family_Name & other){
            name_=other.name_;
        }
        Family_Name & operator=(const Family_Name & other){
            name_=other.name_;
            return *this;
        }
    public:
        static Family_Name yang;
        static Family_Name zhang;
        static Family_Name liu;
        static Family_Name zhao;
    };
    
    Family_Name Family_Name::yang("yang");
    Family_Name Family_Name::zhang("zhang");
    Family_Name Family_Name::liu("liu");
    Family_Name Family_Name::zhao("zhao");
    
    int main() {
        Family_Name a = Family_Name::yang;
        return 0;
    }
  • 相关阅读:
    归并之将两个有序数组合并(已測试)
    Embedded Android 协同翻译
    IOS中公布应用程序,进度条一直不走怎么处理
    《textanalytics》课程简单总结(2):topic mining
    编程小错误备忘录
    观察者模式
    scrapy递归抓取网页数据
    leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法
    spring4.0.0的配置和使用
    ios面试基础
  • 原文地址:https://www.cnblogs.com/supersponge/p/8965668.html
Copyright © 2011-2022 走看看