• C++入门篇十一


    单例对象:为了让类只有一个实例,实例不需要自己释放掉

    不管创建多少个实例对象进行访问,访问的都是同一个值

    #include "pch.h"
    #include  <iostream>
    using  namespace  std;
    
    //创建主席类,单例对象
    
    class  Chairman {
    public:
        //提供get方法访问主席,private类内是可以访问的
        static  Chairman*  getInstance() {
            return  singelman;//chairman这里是定义了是返回什么类型的数据
        }
    
    private:
        Chairman() {
            cout << "创建新的实例" << endl;
        }
    
        Chairman(Chairman &c) {
            //拷贝构造函数私有话,下面就不能进行拷贝了
        }
        static  Chairman  *singelman;//创建一个静态成员变量,内部提供一个静态指针,只维护这个对象指针
    
    };
    
    //初始化,静态成员变量实现
    Chairman  * Chairman::singelman = new  Chairman;//初始化这个sinplechair,前面是什么类型
    
    void    test01() {
        cout << "开始" << endl;
        Chairman * cm1 = Chairman::getInstance();//这里是创建了两个对象
        Chairman * cm2 = Chairman::getInstance();
        //解释:cm2是一个指针,*cm2是一个整体,一个实例对象
        if (cm1 == cm2) {
            cout << "一样" << endl;//结果是一样的,因为共享数据,同一个对象
        }
        else {
            cout << "不一样" << endl;
        }
    
    
        /*
        Chairman  *cm3 = new  Chairman(*cm2);//通过拷贝构造在创建一个新的,cm2是一个指针对象,*cm2是一个整体
        Chairman   cm4(*cm2);//这个也是拷贝构造
        //注意,拷贝构造出来的名字,但是属性不同,不是同一个人了,所以不能这样,单例对象,不能这样
        */
        
    };
    int main() {
        test01();
    }

    如果要让某一个属性不可以更改的话,可以设置为私有的权限,private
    可以提供一个公有权限,查看该属性的值string getval(){return xxx},提供查看的api接口,但是只能访问,不能修改

    目的:为了让类中只有一个实例,实例不需要自己释放

    将默认构造和拷贝构造私有化

    内部维护一个对象指针

    私有化唯一指针

    对外提供getinstance方法访问这个指针,只能访问,不能修改

     

    Priner单例对象例子:

    #include "pch.h"
    #include <iostream>
    using   namespace  std;
    #include<string>
    
    class  Printer {
        //写一个类,是一个打印机的类
    public:
        //拿到这个打印机
        static  Printer *  getInstance() {
            return  singlepriner;//返回打印机,(),静态成员变量可以通过静态成员函数来拿
        }
        void    Printning(string   request) {
            //不用返回值,直接void
            cout << "打印成功:" << request << endl;
        }
    private:
        static  Printer *  singlepriner;//写一个指针对象
        Printer() {}
        Printer(Printer  &p) {}//写拷贝构造函数
    
    };
    //对静态成员变量进行初始化,对指针对象进行初始化,Printer * xxxx(指针对象)=new Printer;
    Printer *  Printer::singlepriner = new  Printer;//进行初始化
    
    
    void   test01() {
        //Printer作用域下面的getinstance方法()
        Printer  *priner = Printer::getInstance();//拿到打印机,用指针的形式取到打印机
        priner->Printning("申请报告");
        priner->Printning("加薪报告");
    
    }
    int main() {
        test01();
    }

  • 相关阅读:
    css
    bootstrap
    在线小工具
    文档工具-Markdown
    js
    棋盘问题(深搜,统计)
    ****Curling 2.0(深搜+回溯)
    POJ 2676 Sudoku(深搜)
    POJ 2488 A Knight's Journey(深搜+回溯)
    ural 1104. Don’t Ask Woman about Her Age
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10687360.html
Copyright © 2020-2023  润新知