标题:[讨论]C++问题,如何使用数据成员做默认参数
只看楼主
hyerty
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-7-15
 问题点数:0 回复次数:4 
[讨论]C++问题,如何使用数据成员做默认参数

我定义了如下一个简单作图类:
struct WinCG {
HDC hdc; // 作图的设备表句柄
COLORREF penColor; // 当相关函数调用省略颜色参数时,使用其作为默认颜色
WinCG(HDC hdc_=0, COLORREF color_=0): hdc(hdc_), color(color_) { }
int setPixel(int x0, int y0, int color=penColor) // Error!!
{
return SetPixel(hdc, x0, y0, color);
}
};

我的目的是包装原GDI函数使得其使用起来更简单,省略hdc参数,而color参数变成可选,当不指定颜色参数时才使用WinCG内定义的penColor。结果编译错误,原因是penColor不是静态成员,但若是静态成员则该类所有对象将共用一个默认颜色,我希望不同的WinCG对象可以设置不同的默认颜色。我自己想了几种解决方案,都觉得不好:

1. 增设一个静态成员作默认颜色,调用某个对象的绘图函数前,先用对象的penColor给该静态成员赋值。缺点是:多个对象共存并交互使用时,每更换一次作图对象就要手动设置一次静态默认颜色值,显然比直接用原GDI函数更麻烦很多。

2. 取消该可选参数,直接使用penColor作为原GDI函数的color参数。缺点是:当不想使用WinCG对象的默认参数,而想自己指定color时,需要先重设WinCG对象的penColor的值,函数调用完毕,还应恢复其原值。

3. 同2,但需要自定颜色时,直接调用原GDI函数。缺点:操作不统一,而且,没有起到封装的目的。

希望大家帮忙看看,有没有别的更好的办法来实现我的目的?或者,我的这种封装思想本身有问题吗?
谢谢~~

[此贴子已经被作者于2007-10-21 13:55:23编辑过]

搜索更多相关主题的帖子: 参数 使用数据 成员 
2007-10-21 13:51
ACMer
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2007-10-17
得分:0 
你还是先学好C++的类吧,先弄明白this指针的意义
2007-10-21 14:11
hyerty
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-7-15
得分:0 
回复:(ACMer)你还是先学好C++的类吧,先弄明白this...
按我的理解,this指针的意义在于,在对象的函数内部,也可以通过this指针访问到对象本身,return *this;返回对象本身的引用即是常见的一种应用方式。我希望把对象成员设为函数的默认参数(当调用者省略参数时才使用对象内部的数据成员),你可以直接告诉我怎么做吗?希望你理解我的意思。
2007-10-21 21:11
xuchaowd
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-10-21
得分:0 

我以前学c++ 不过下载学C#了

2007-10-21 21:18
blackboy
Rank: 1
等 级:新手上路
威 望:1
帖 子:34
专家分:0
注 册:2007-10-21
得分:0 
add(int b)
{
this.b=b;


}
2007-10-23 22:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-179530-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.074031 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved