关于成员函数参数的传递

xinyuzhong_love 2014-02-07 10:41:47
在《精通QT4编程》书中关于事件处理章节中有如下代码:
void DrawArea::resizeEvent(QResizeEvent *event)
{
if (width() > image.width() || height() > image.height()) {
int newWidth = qMax(width() 128, image.width());
int newHeight = qMax(height() 128, image.height());
resizeImage(&image, QSize(newWidth, newHeight));
update();
}
void DrawArea::resizeImage(QImage *image, const QSize &newSize)
{
if (image->size() == newSize)
return;

QImage newImage(newSize, QImage::Format_RGB32);
newImage.fill(qRgb(255, 255, 255));
QPainter painter(&newImage);
painter.drawImage(QPoint(0, 0), *image);
*image = newImage;
}
想问的是既然void resizeEvent()和void resizeImage()是类DrawArea类的成员函数,为什么在resizeImage()中数据成员Qimage image要以指针的形式传递,成员函数不是可以直接操作数据成员吗?
头文件如下:

#ifndef _DRAWAREA_H
#define _DRAWAREA_H

#include <QColor>
#include <QImage>
#include <QPoint>
#include <QWidget>

class DrawArea : public QWidget
{
Q_OBJECT

public:
DrawArea(QWidget *parent = 0);
bool isModified() const { return modified; }
void clearImage();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
private:
void drawLineTo(const QPoint &endPoint);
void resizeImage(QImage *image, const QSize &newSize);
bool modified;
bool scribbling;
int myPenWidth;
QColor myPenColor;
QImage image;
QPoint lastPoint;
};
#endif
...全文
188 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinyuzhong_love 2014-02-09
  • 打赏
  • 举报
回复
只能以重用性的角度理解了…
rocktyt 2014-02-07
  • 打赏
  • 举报
回复
个人比较倾向于resizeImage可能会用来对其他image进行resize 就算实际上并没有这样的代码,这样写至少保留了一种可能性 这得看作者是怎么设计的 光看这两个函数的话,如果是我,是不会加这个参数
熊熊大叔 2014-02-07
  • 打赏
  • 举报
回复
一个函数,尽量只依赖参数,而不访问全局变量、静态变量或成员变量。 这样的函数容易被测试、移植,是一种好的编程风格。
waterSStreaming 2014-02-07
  • 打赏
  • 举报
回复
你给的头文件里

void resizeImage(QImage *image, const QSize &newSize);
操作的那个image难道一定是那个class里的那个image?

class DrawArea : public QWidget
{
    //...
    QImage image;
    //...
};
我想操作其他的image的数据也可以吧,只不过名字起的一样,但是两个指的不一定是同一个。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧