类管理指针成员

 

类管理指针成员

 

 

 

c++编程提倡使用标准库,一个原因是标准库大胆减少对指针的使用。但是许多程序是离不开指针的。包含指针的类需要特别注意复制控制,原因是复制指针时只复制指针中的地址,而不复制指针所指向的对象。这样当把一个对象复制给另一个对象后,当改变一个对象后,另一个对象也会收到牵连。另外一个对象释放掉后,其指针已经被释放掉。而另一个对象还不知道,其实该对象中的指针已经成为悬垂指针。这样再操作就会出现错误。

1. 定义智能指针类

原理:定义一个计数的类,所有复制的都是指向这一个类,每复制一次,该类加1一次;每析构一次,该类减1一次。当次数为0时,释放掉动态申请的空间。

图例:

1)定义一个对象

2)复制一个对象

复制代码
#include <iostream>
#include <string>
using namespace std;

class HasPtr;
//定义计数类
class U_Ptr { //没有访问标号,默认为private,保证类的隐私,但是友员类可以随意访问(包括private) friend class HasPtr; U_Ptr(int *p) : ip(p), use(1) {} ~U_Ptr() { cout << "hello" << use << endl; delete ip; } int *ip; size_t use; //次数 }; class HasPtr { public: HasPtr(int *p, int v) : ptr(new U_Ptr(p)), val(v) {} HasPtr(const HasPtr &orig) : ptr(orig.ptr), val(orig.val) { ++ptr->use; } HasPtr& operator=(const HasPtr &orig); ~HasPtr() { cout << "hahha::" << ptr->use << endl; if(--ptr->use == 0) delete ptr; } private: U_Ptr *ptr; int val; }; HasPtr& HasPtr::operator=(const HasPtr &orig) { ++orig.ptr->use; if(--ptr->use == 0) delete ptr; ptr = orig.ptr; val = orig.val; return *this; } int main() { int i = 56, j = 12; int *p = new int(56); HasPtr hasptr(p, j); HasPtr hasptr2(hasptr); }
复制代码

2. 定义值型类

给指针成员提供语义值。具有值语义的类所定义的对象,其行为很像算术类型的对象:复制值型对象时,会得到一个不同的版本。对副本的改变不会反映在原有对象上。

复制代码
#include <iostream>
#include <string>
using namespace std;

class HasPtr
{
    public:
        HasPtr(const int &p, int v) : ptr(new int(p)), val(v) {}
        HasPtr(const HasPtr &orig) : ptr(new int(*orig.ptr)), val(orig.val) {  } //复制值型对象时,会得到一个不同的版本
        HasPtr& operator=(const HasPtr &orig);
        ~HasPtr() { delete ptr; }
    private:
        int *ptr;
        int val;
};

HasPtr& HasPtr::operator=(const HasPtr &orig)
{
    *ptr = *orig.ptr;                                                        //赋值时,只改变指针指向的值,但是指针是不变的
    val = orig.val;
    return *this;
}

int main()
{
    int i = 56, j = 12;
    HasPtr hasptr(i, j);
    HasPtr hasptr2(hasptr);
    hasptr2 = hasptr;
}
复制代码
 
 
分类: c++/c

手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统(附源码+视频教程(第7,8节))

 

一 本系列随笔概览及产生的背景

近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开发一个小型的b/s结构的管理系统,已达到帮助团队成员快速掌握b/s结构信息系统的开发方法。

源码位置:https://github.com/kamiba/FineUIDemo

源码下载办法:安装SVN客户端(本文最后提供下载地址),然后checkout以下的地址:https://github.com/kamiba/FineUIDemo.git

初学者应先下载源代码,然后对照视频,一步一步跟着做。

演示地址:http://42.121.4.78:8055/ 用户名和密码 均为admin

作者计划将本系列博文+视频做成一个Step by Step系列,请初级读者关注,高手绕道。目录拟定如下:

1.使用FineUI搭建系统基本框架

2.系统需求及数据库设计

3.产品分类信息管理之列表显示及数据删除,附带说明三层架构用法,数据库分页实现方法。

4.产品分类信息管理之新增记录和修改记录,使用代码比较工具Beyond Compare进行代码比较

5.加工人员管理(如何基于已开发完成的产品分类信息管理模块,采取拷贝,粘贴,批量替换的方式快速完成其他模块的开发)。

6.产品管理(数据库视图概念,多表连接,dropdownlist控件用法)。

7.取货管理;

8.送货管理,取送货统计;

9.支付管理,支付统计(grid控件,分页,数据表查询)

10.将取送货管理系统整合进AppBox2.0(AppBox是使用FineUI开发的开源的通用权限管理框架,目前最新版本是3.0)。

二 第7,8节视频的主要内容简介

1.实现取货管理,送货管理,取送货统计模块;

2.数据库重要查询技术---多表连接,嵌套子查询,内连接,左连接;

3.FineUI日期控件用法。

三 前八节视频下载地址及常用工具下载地址

1.FineUI+动软代码生成器开发一个b/s结构的取送货管理信息系统第一节

2.FineUI+动软代码生成器开发一个b/s结构的取送货管理信息系统第二节

3.FineUI+动软代码生成器开发一个b/s结构的取送货管理信息系统第三节

4.产品分类信息管理之新增记录和修改记录,使用代码比较工具Beyond Compare进行代码比较

5.加工人员管理(如何基于已开发完成的产品分类信息管理模块,采取拷贝,粘贴,批量替换的方式快速完成其他模块的开发)。

6.产品管理(数据库视图概念,多表连接,dropdownlist控件用法)。

7.取货管理;

8.送货管理,取送货统计;

9.动软代码生成器V2.41安装包

10.SVN客户端安装包

11.代码比较工具Beyond Compare

12.SQL_Prompt---sql代码提示工具

四 第9节视频内容预告

1.支付管理;

2.支付统计管理;

 

作者:宋波
出处:http://www.cnblogs.com/ice-river/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
 
 
原文地址:https://www.cnblogs.com/Leo_wl/p/3504462.html