关于Draw()函数

Symbian 3rd中Draw()函数是const的成员函数,原型是 void Draw(const TRect& aRect) const。

因此在该函数中不能修改类的成员变量,否则报"illegal assignment to constant"的错误。

如果要初始化或者修改成员变量的话,一般将这些操作实现在ConstructorL()中实现。

程序运行的顺序是先执行constructorL(),再调用Draw()进行图形的渲染。(未完)

 

在C++中,`draw`函数并非是标准库中的内置函数,而是在自定义类中常见的一个成员函数,通常用于绘制图形或执行某种可视化操作,常与多态性、函数重写等概念结合使用。 ### 函数重写与多态性 函数重写发生在继承关系中,在派生类中重新定义基类的虚函数,要求函数函数名、参数列表、返回类型)必须与基类中的虚函数完全相同,并且基类中的函数必须声明为虚函数。通过基类指针或引用调用虚函数时,程序会在运行时根据对象的实际类型来动态地调用对应的函数,从而实现多态性。 以下是一个示例代码: ```cpp #include <iostream> class Shape { public: // 虚函数 virtual void draw() { std::cout << "我是基类Shape函数" << std::endl; } }; class Circle : public Shape { public: // 重写基类的虚函数 void draw() { std::cout << "我是派生类Circle函数" << std::endl; } }; class Rectangle : public Shape { public: // 重写基类的虚函数 void draw() { std::cout << "我是派生类Rectangle函数" << std::endl; } }; int main() { Shape* shape1 = new Circle(); Shape* shape2 = new Rectangle(); Shape* shape3 = new Shape(); shape1->draw(); // 调用 Circle 类的 draw 函数 shape2->draw(); // 调用 Rectangle 类的 draw 函数 shape3->draw(); // 调用 Shape 类的 draw 函数 delete shape1; delete shape2; delete shape3; return 0; } ``` 在上述代码中,`Shape`是基类,定义了虚函数`draw()`。`Circle`和`Rectangle`类继承自`Shape`并重写了`draw()`函数。在`main`函数中,通过基类指针调用`draw()`函数时,会根据指针实际指向的对象类型调用相应的`draw()`函数,这体现了多态性 [^3]。 ### 纯虚函数 纯虚函数的主要作用是定义接口规范,强制要求派生类必须实现这些函数,从而实现接口的统一和标准化。包含纯虚函数的类被称为抽象类,不能实例化。 以下是一个使用纯虚函数的示例代码: ```cpp #include <iostream> using namespace std; class Shape { public: virtual void draw() = 0; // 纯虚函数 }; class Circle : public Shape { public: void draw() override { cout << "Drawing a circle" << endl; } }; int main() { Shape* shape = new Circle(); shape->draw(); // 输出:Drawing a circle delete shape; return 0; } ``` 在这个例子中,`Shape`是抽象类,定义了纯虚函数`draw()`。`Circle`类继承自`Shape`并实现了`draw()`函数。在`main`函数中,通过基类指针调用`draw()`函数,实际上调用的是`Circle`类的`draw()`函数 [^4]。 ### 实际开发中的应用场景 - **框架设计**:如 Qt 框架中的`QAbstractItemModel`抽象类,定义了表格 / 列表数据模型的接口,其中可能包含`draw`相关函数来绘制表格或列表的元素 [^5]。 - **插件系统**:通过抽象类定义插件接口,不同插件实现各自的`draw`函数来完成不同的绘制任务 [^5]。 - **设计模式**:如策略模式、工厂模式中常用抽象类和纯虚函数定义行为接口,`draw`函数可以作为其中的一个行为接口 [^5]。 ### 注意事项 - 在基类中,要重写的函数必须使用`virtual`关键字声明为虚函数,否则派生类中的同名函数会隐藏基类的函数而不是重写它。 - 派生类重写的函数必须与基类的虚函数具有相同的函数名、参数列表和返回类型。如果有任何差异,将不会发生重写,而是定义了一个新的函数 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值