- 浏览: 509920 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jkxydp:
算法运行的结果根本就不对。
BM算法. -
soarwindzhang:
感谢博主的分享,我今天看了您的UFSET非递归的路径压缩时感觉 ...
并查集 -
zhangning290:
楼主好像只考虑了坏字符规则,。没有考虑好后缀
BM算法. -
lsm0622:
文字描述有错误 误导新学者
求有向图的强连通分量(scc):Tarjan算法 -
knightchen:
博主,你太强了!这篇文章对我学习C++多线程很有帮助!谢谢
并发学习之一_windows下ZThread在CodeBlocks上的安装与配置
1,这个实例采用了使用计数策略.
2,实例代码:
2,实例代码:
#include <iostream> #include <string> #include <set> #include <map> #include <utility> #include <cstddef> #include <stdexcept> #include <algorithm> using namespace std; class Item_base { friend istream& operator>>(istream&, Item_base&); friend ostream& operator<<(ostream&, const Item_base&); public: virtual Item_base* clone() const { return new Item_base(*this); } public: Item_base(const string &book = "",double sales_price = 0.0): isbn(book), price(sales_price) { } string book() const //接口和实现 { return isbn; } virtual double net_price(size_t n) const //接口和缺省 { return n * price; } virtual ~Item_base() { } //基类必须的虚析构 private: string isbn; protected: double price; }; class Bulk_item : public Item_base //一个继承类 { public: Bulk_item* clone() const //配合计数句柄 { return new Bulk_item(*this); } Bulk_item(): min_qty(0), discount(0.0) { } Bulk_item(const string& book, double sales_price, size_t qty = 0, double disc_rate = 0.0): Item_base(book, sales_price),min_qty(qty), discount(disc_rate) { } double net_price(size_t) const; //继承的接口 private: size_t min_qty; double discount; }; double Bulk_item::net_price(size_t cnt) const { if (cnt >= min_qty) return cnt * (1 - discount) * price; else return cnt * price; } class Lim_item : public Item_base //第二个继承类 { public: Lim_item* clone() const { return new Lim_item(*this); } Lim_item(const string& book = "", double sales_price = 0.0, size_t qty = 0, double disc_rate = 0.0): Item_base(book, sales_price), max_qty(qty), discount(disc_rate) { } double net_price(size_t) const; private: size_t max_qty; double discount; }; double Lim_item::net_price(size_t cnt) const { size_t discounted = min(cnt, max_qty); size_t undiscounted = cnt - discounted; return discounted * (1 - discount) * price + undiscounted * price; } class Sales_item //计数句柄类 { public: friend class Basket; Sales_item() : p(NULL), use(new size_t(1)) {} Sales_item( const Item_base& item) : p(item.clone()), use(new size_t(1)) {} Sales_item(const Sales_item& s) : p(s.p), use(s.use) { (*use)++; } Sales_item& operator=(const Sales_item& rhs) { if( &rhs == this) return *this; (*rhs.use)++; decr_use(); p = rhs.p; use = rhs.use; return *this; } ~Sales_item() { decr_use(); } const Item_base* operator->() const { if (p) return p; else throw logic_error("unbound Sales_item"); } const Item_base& operator*() const { if (p) return *p; else throw logic_error("unbound Sales_item"); } private: Item_base* p; size_t* use; void decr_use() { if( --(*use) == 0) { delete p; delete use; } } }; inline bool compare(const Sales_item &lhs, const Sales_item &rhs) //比较函数,构造map容器. { return lhs->book() < rhs->book(); } class Basket //一个操作类 { typedef bool (*Comp)(const Sales_item&, const Sales_item&); public: typedef multiset<Sales_item, Comp> set_type; typedef set_type::size_type size_type; typedef set_type::const_iterator const_iter; Basket(): items(&compare) { } // 初始化 void add_item(const Sales_item &item) { items.insert(item); } size_type size(const Sales_item &i) const { return items.count(i); } double total() const; // sum of net prices for all items in the basket private: std::multiset<Sales_item, Comp> items; }; double Basket::total() const { double sum = 0.0; for (const_iter iter = items.begin(); iter != items.end(); iter = items.upper_bound(*iter)) { int num = items.count(*iter); double value = (*iter) -> net_price(num); cout << "ISBN: " << (*iter) -> book() << "\tnumber sold: " << num << "\ttotal price: " << value << endl; sum += value; } return sum; } int main() { Sales_item item1(Item_base("123", 45)); Sales_item item2(Bulk_item("345", 45, 3, .15)); Sales_item item3(Bulk_item("678", 55, 5, .25)); Sales_item item4(Lim_item("abc", 35, 2, .10)); Sales_item item5(Item_base("def", 35)); Basket sale; cout << "added first item" << endl; sale.add_item(item1); sale.add_item(item1); sale.add_item(item1); sale.add_item(item1); sale.add_item(item2); sale.add_item(item2); sale.add_item(item2); sale.add_item(item2); sale.add_item(item2); sale.add_item(item2); sale.add_item(item2); sale.add_item(item2); sale.add_item(item3); sale.add_item(item3); sale.add_item(item3); sale.add_item(item3); sale.add_item(item3); sale.add_item(item3); sale.add_item(item3); sale.add_item(item3); sale.add_item(item4); sale.add_item(item4); sale.add_item(item4); sale.add_item(item4); sale.add_item(item4); sale.add_item(item4); sale.add_item(item5); sale.add_item(item5); cout << "added last item" << endl; cout << sale.total() << endl; return 0; }
发表评论
-
C语言中的不定参数
2010-12-15 12:28 130931,最近刚刚知道C语言还有不定参数这么个东东。 2,解决方法 ... -
剖析浮点数
2010-12-10 10:39 1173[转载]http://blog.csdn.net/masefe ... -
存在虚基类时,类对象的大小
2010-12-09 19:38 11981, 实例代码: #include <iostrea ... -
关于父类的构造的顺序
2010-12-09 19:33 6411,没有虚基类的情况: #include <iost ... -
关于empty class的大小
2010-12-09 19:32 10961,首先简要说明下为什么empty class的大小不是0? ... -
JVM实现机制及内部基本概念
2010-12-09 19:27 845兴趣所致,搜了一些关于JVM的简单介绍,算是扫盲吧。 1.J ... -
指向对象成员变量的指针。
2010-12-09 19:18 11351,工作定了后,把《Inside the C++ object ... -
面向对象的一些常见问题总结。
2010-12-09 19:08 8991,构造函数中调用虚函数的问题。 注:一般编译器都会在执行完b ... -
关于C++的名字查找规则
2010-12-09 19:05 13591,总结一句话:由内向外,找到合适的即刻停止。 实例代码: ... -
继承下的名字查找规则,最近作用域
2010-11-06 20:04 8751, #include <iostream> ... -
虚基类和多重继承总结
2010-11-06 19:54 8561,虚基类,其构造函数总是在最后一个层次最先并且真正被执行。 ... -
为什么构造函数,不能是virtual?
2010-09-25 15:24 16671,C++语言是静态语言,而把构造函数写成虚函数意味这可以动态 ... -
大小端对应字节, 注意和一个字节内位序的区分
2010-09-09 10:11 14071,一个例子: #include <stdio.h& ... -
实现:不能被继承的类
2010-08-31 17:35 8431,首先想到的是在C++ 中 ... -
提升为N的倍数(N为2的指数次)
2010-07-18 10:16 7641,可以这么做: int num=15; num = (num ... -
C++ 中:new的用法
2010-07-17 16:26 1906先放这儿,有时间了,在 ... -
关于类的一些语法:
2010-06-02 09:26 703所谓"书越读越薄",这话说得真是有道理. ... -
sizeof(string对象)的大小
2010-06-01 11:32 15321,无语了,string对象的大小固定就是4啊. 2,实例代码 ... -
C语言中不同增值语句的区别
2010-05-12 12:50 6571, mango[i++]+=y; 被当作 mango[i]= ... -
尽量不要在一个表达式中有多个副作用
2010-05-02 10:48 10341,一般来说,编c/c++程序有一个纪律:一个语句中不要有两个 ...
相关推荐
包括了源代码,根据 VC 6.0的编程书籍中的例子修改而成的,向大家展示Windows程序内部运行原理,比如Windows应用程序,操作系统,计算机硬件之间的相互关系等,面向初学者参考的句柄例子。例子里面包括了了PPT教程,...
在C#编程中,句柄(Handle)是一个用于标识操作系统对象(如窗口、控件或图像)的唯一数值。这个数值是由操作系统分配的,开发者可以通过句柄来操作这些对象。本教程将深入探讨如何在C#中进行句柄操作,特别是在遍历...
本篇将详细介绍如何使用C#语言通过调用Windows API来获取所有窗口的句柄,并提供一个简单的实例源码。 首先,我们需要了解Windows API。API(Application Programming Interface)是操作系统为开发者提供的函数库,...
句柄应用的简单例子,可以根据鼠标移动位置的坐标 获得该坐标对应程序的句柄相关信息
总结来说,这个实例"VB读取句柄实例EnumerationX"涵盖了VB中使用API函数获取和操作窗口句柄的基本技巧,涉及到API导入、句柄枚举、窗口操作等核心概念。这对于理解和开发系统级别的VB应用,尤其是涉及到多窗口交互或...
#### 应用实例:获取对话框子窗口的句柄 在MFC中,使用 `AfxGetMainWnd` 可以获取主窗口的句柄。但若要获取对话框中的子窗口句柄,则需结合上述函数使用,例如通过 `EnumChildWindows` 遍历对话框的子窗口,找到...
在编程过程中,我们可能会遇到一些看似诡异的问题,例如“赋值后的静态句柄和实例莫名其妙消失了”。这种情况通常出现在使用面向对象编程(OOP)语言,如Java、C#或Python时,涉及到静态变量和对象生命周期的管理。...
本文将深入探讨C#中如何使用句柄类库进行.NET操作句柄,并通过`TestWin`这个示例文件名,推测这是一个关于Windows API交互的实例。 首先,让我们了解句柄的基本概念。句柄不是实际对象的指针,而是由操作系统分配的...
VB Spy获取进程句柄源码实例,列出出当前运行程序的窗口信息、子进程信息和鼠标坐标、句柄信息,程序可设置窗口总在最前端显示。
在这个例子中,我们使用`FindWindow`方法查找具有特定标题的窗口,并返回其句柄。句柄通常用于进一步操作,如发送消息。 发送消息到窗口则需要用到`SendMessage`函数。这个函数允许我们将特定的消息类型和参数发送...
在本文中,我们将深入解析`this`引用句柄的使用、含义及其在实际编程中的应用。 `this`的基本概念: 1. `this`关键字代表了当前对象的引用,也就是说,它总是指向方法调用时的对象实例。 2. 当在类的成员变量和局部...
例如,`HINSTANCE`是实例句柄,`HBITMAP`是位图句柄,`HDC`是设备描述表句柄,`HICON`是图标句柄等。在C++的MFC库中,`CWinApp::m_hInstance`变量存储了应用程序的实例句柄,可以通过`AfxGetInstanceHandle()`函数...
在编程领域,窗口句柄(Window Handle)是一个重要的概念,特别是在使用Visual Basic(VB)进行Windows应用程序开发时。窗口句柄是操作系统分配给每个窗口的一个唯一标识符,它是一个整数值,用来区分系统中的不同...
- 使用`AfxGetInstanceHandle()`获取当前应用程序实例的句柄。 ```cpp HINSTANCE hInstance = AfxGetInstanceHandle(); ``` 2. **获取框架窗口句柄** - 获取主框架窗口的句柄。 ```cpp CMainFrame* ...
根据《Microsoft Windows 3 Developer's Workshop》一书中的定义,句柄可以用于标识包括但不限于模块、任务、实例、文件、内存块、菜单、控件、字体、资源(如图标、光标、字符串)、GDI对象(如位图、画刷、元文件...
在Windows操作系统中,窗口句柄(HWND)是一个整数值,它代表了一个特定的窗口实例。本教程将深入探讨如何在C#中获取任意窗口的句柄,并通过提供的源代码进行学习。 首先,理解窗口句柄的重要性。窗口句柄在处理...
以下是一个简单的使用JNI的例子: 1. 创建一个Java类,声明本地方法: ```java public class NativeWindow { static { System.loadLibrary("windowhandle"); // 加载本地库 } public native long ...
通过窗口句柄,开发者可以使用Win32 API函数对特定窗口进行操作,这些操作包括但不限于显示、隐藏、移动、调整大小以及发送和接收消息。 二、查找窗口句柄的方法 在C#中,通常需要借助P/Invoke技术来调用Windows ...
VB查询QQ句柄并控制的实例
4. 实现句柄的查找和使用,这在需要控制其他应用程序或进行自动化操作时非常关键。 5. 学习如何组织和管理项目文件,包括编译和运行可执行文件。 6. 理解和应用Visual Basic的控件,如列表视图,以展示和管理数据。 ...