2013-11-15 singelton的实现及学习的笔记
来源:互联网 发布:大数据如何分析 编辑:程序博客网 时间:2024/05/29 19:14
singelton要实现肯定是需要将构造函数设置为私有,再通过开放一个接口,限制只能存在一个对象。记得当时说在这个时候,拷贝构造函数也需要封住,但是后面想想不知道为什么?现在仍然不知道为什么
今天发现的问题如下:
一、关于拷贝构造函数,静态方法返回的是一个指针,在此时什么情况下才会调用拷贝构造函数?所以为什么要封掉拷贝构造函数?【未解决】
在实现singleton的时候,编写了一个Boss.h文件,代码如下
#ifndef BOSS_H_INCLUDED#define BOSS_H_INCLUDED#include<iostream>using namespace std;class Boss{private: static Boss* boss; int hp; char* name; int level; Boss();Boss(const Boss&){};//拷贝构造函数,不知道为什么这里也需要封住 ~Boss();public: static Boss* singleton(); void setHp(int); void setName(char*); void setLevel(int); void paint(); static void destructBoss();};#endif // BOSS_H_INCLUDED
Boss.cpp文件如下#include "Boss.h"Boss* Boss::boss=NULL;//类静态成员变量的真正定义Boss::Boss(){ name=new char[20];}Boss::~Boss(){ delete name;}void Boss::setHp(int number){ if(hp>0){ hp=number; } else{ hp=100; } }void Boss::setName(char* name){ int i=0; while(name[i]!='\0'){ this->name[i]=name[i]; i++; } this->name[i]='\0';}void Boss::setLevel(int t){ level=t;}Boss* Boss::singleton(){ if(boss==NULL){ boss=new Boss(); } return boss;}void Boss::paint(){ cout<<name<<" "<<hp<<" "<<level<<endl;}void Boss::destructBoss(){ delete boss;}
这样是对的。二、当静态成员变量初始化放在.h文件中出现重定义?放在 cpp文件中就不存在,为什么?
初步猜测为即使在Boss.h中定义了预处理变量,但是当它被include至main.cpp时,此段代码被拷贝至main.cpp文件中,而当调用Boss.cpp中的方法,即在进行链接时,cpp中也include了该Boss.h文件,也有静态变量的定义,因此就出现了重定义,编译无法通过。当将静态变量的定义放入Boss.cpp中,链接一次就只出现一次定义。
三、在一个有参数的构造方法中调用了无参数的构造方法,但是后来发现这个调用和JAVA里面是不一样的,而且出现了对象销毁;后来查看别人的博客了解了是怎么一回事,调用构造函数相当于创建了一个新的对象,但想要创建的该对象本身属性是没有变的。但是还是不明白为什么会出现对象的销毁【未解决】参考他人的博客http://www.cnblogs.com/chio/archive/2007/10/20/931043.html
【今天明白了 #ifndefine BOSS_H这个有什么用了】
- 2013-11-15 singelton的实现及学习的笔记
- Singelton
- 学习笔记-多项式的加减乘数及微分的C++实现15/11/02
- 栈的实现及应用学习笔记--Java实现
- android学习笔记---手机拍照功能的实现,及原理
- Lua学习笔记5:类及继承的实现
- JDBC学习笔记及连接数据库的实现过程
- Lua学习笔记4:类及集成的实现
- 题目2:Singelton单例模式:设计一个类,只能生成该类的一个实例。
- 【Linux学习笔记】kill及kill -9的用法及如何实现进程的优雅退出
- 学习笔记---strstr的实现
- 学习笔记--代理与AOP及实现类似SPRING的可配置的AOP框架
- B-树的学习笔记与C实现及 简单的RPC编程实践——HelloWorld的实现
- Android学习笔记11:图像的平移、旋转及缩放
- Android学习笔记11:图像的平移、旋转及缩放
- 学习笔记——atoi函数的用法及用C语言实现atoi
- Android学习笔记12——内存卡操作及文件下载功能的实现
- 学习笔记——atoi函数的用法及用C语言实现atoi
- C++头文件包含顺序问题(转载)
- 深入JVM的Class文件结构
- JIRA后台索引无法进行的解决方式
- Protel PCB各层含义
- 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信
- 2013-11-15 singelton的实现及学习的笔记
- Eclipse 常用技巧功能
- Android自定义进度条(ProgressBar)的问题
- C#获取本机外网ip
- JVM并发机制的探讨——内存模型、内存可见性和指令重排序
- 修改flash builder默认浏览器和安装的flash player不是调试器
- java笔记1
- MapReduce编程(入门篇)-wordcount
- libxml2 安装使用