virtual 函数会动态绑定,而virtual函数的缺省参数值是静态绑定的。用一个base类型的指针p去指向一个derived类对象,通过p调用虚函数时,会动态绑定到实际所指对象中的函数;用一个derived类型的指针p2指向一个derived对象,由p2调用函数时,直接就是调用的derived中的函数,其参数值也是derived类中函数对应的参数值。
#include
using name...
分类:
编程语言 时间:
2015-06-25 12:26:23
阅读次数:
155
不可或缺 Windows Native 之 C++: 函数重载, 缺省参数, 内联函数, 函数模板
分类:
编程语言 时间:
2015-06-08 11:17:35
阅读次数:
164
在继承中,分为两类函数:virtual和non-virtual。而重新定义一个非虚函数是不好的(条款36),那么以下的讨论就是如何定义继承而来的虚函数。强调:虚函数是动态绑定的,而缺省参数值是静态绑定的。 1 #include 2 3 class Shape 4 { 5 public: 6 ...
分类:
其他好文 时间:
2015-05-24 12:54:55
阅读次数:
195
如果类继承中重新定义了虚函数,那么虚函数中的缺省参数不要重新定义。
用一句话来解释原因就是:虚函数是动态绑定的(dynamically bound),但是缺省参数却是静态绑定的(statically bound)。
静态类型和动态类型
首先需要了解什么是对象的静态类型和动态类型,对象的所谓静态类型(static type),就是它在程序中被声明时所采用的类型。
以下面的类为例:
clas...
分类:
其他好文 时间:
2015-05-20 18:36:00
阅读次数:
210
考虑如下的代码:class Shape{public: enum ShapeColor{Red, Green, Blue}; virtual void draw(ShapeColor color = Red) const = 0; ...};class Rectangle: pub...
分类:
其他好文 时间:
2015-04-24 16:16:13
阅读次数:
117
条款36绝不重新定义继承而来的non-virtual函数
条款37绝不要重新定义继承而来的缺省参数值条款...
分类:
编程语言 时间:
2015-03-05 23:48:50
阅读次数:
329
一、普通函数的缺省参数
# include
using namespace std;
void func(int m=0,int n=1)
//m=0,叫做函数的默认参数,也叫做缺省参数。缺省参数可以有一个,也可以有多个。
{
cout<<"m:"<<m<<"\t"<<"n:"<<n<<endl;
}
int main()
{
func();
func(3,5);
//函数调用时,没...
分类:
编程语言 时间:
2014-12-29 09:05:45
阅读次数:
236
C# 4.0中的可缺省参数
C# 4.0现在对方法,构造器,以及索引器支持使用可缺省的参数(注:VB支持可缺省参数可是有年头了)。
当参数的默认值作为声明的一部分被指定的时候,参数就是可缺省的。例如,下面这个方法接受2个参数,一个“category” 字符串参数,另一个“pageIndex”整数参数。“pageIndex”参数有一个默认值 0,它因此是一个可缺省的参数:
当调用上面的方法...
??
3. FP
3.1. 函数
函数的地位和一般的变量是同等的,可以作为函数的参数,可以作为返回值。
传入函数的任何输入是只读的,比如一个字符串,不会被改变,只会返回一个新的字符串。
Java里面的一个问题就是很多只用到一次的private方法,没有和使用它的方法紧密结合;Scala可以在函数里面定义函数,很好地解决了这个问题。
3.1.1....
分类:
其他好文 时间:
2014-10-16 15:13:12
阅读次数:
410
38.绝不要重新定义继承而来的缺省参数值。
重新定义函数缺省参数值意味着重新定义函数,而非虚函数不能重新定义,所以将就考虑不能重新定义虚函数的缺省参数值的原因:虚函数是动态绑定的而缺省参数值是静态绑定的。
静态类型是指程序中声明的类型,而动态类型是指实际对象的类型,举个栗子:
class A{
public:
virtual void fun(int a=0) const{cout<<...
分类:
编程语言 时间:
2014-10-09 21:23:27
阅读次数:
213