问几个关于虚函数的概念--一直没搞懂

软件和网站开发以及相关技术探讨
回复
头像
gre_linewer
帖子: 180
注册时间: 2006-11-22 10:57

问几个关于虚函数的概念--一直没搞懂

#1

帖子 gre_linewer » 2007-05-28 15:48

对虚函数理解不是很多,当时没深入学习,一直没搞懂书上的两句话:
1.虚函数为啥不能是静态的成员函数?
2.可以把析构函数定义为虚函数,但不能将构造函数定义为虚函数.
这句是不是说析构函数是非静态的,而构造函数是静态的
Ubuntu 8.04
IBM R52-18465DC
CPU:PM 1.73Ghz DDR2:768MB 533Mhz
INTEL 915GM/915PM
ATI Mobility Radeon X300 64MB
40G SATA
wkt
帖子: 849
注册时间: 2006-09-07 22:51
联系:

Re: 问几个关于虚函数的概念--一直没搞懂

#2

帖子 wkt » 2007-05-28 17:02

gre_linewer 写了:对虚函数理解不是很多,当时没深入学习,一直没搞懂书上的两句话:
1.虚函数为啥不能是静态的成员函数?
2.可以把析构函数定义为虚函数,但不能将构造函数定义为虚函数.
这句是不是说析构函数是非静态的,而构造函数是静态的
如果想用它做什么 那么换个方法
如果硬要它 那么再去翻更多的书
头像
karron
帖子: 6226
注册时间: 2005-06-11 14:03
来自: 不明真相的群众
联系:

#3

帖子 karron » 2007-05-28 17:34

虚函数的目的就是让子类能够覆盖父类的行为,所以不能是静态函数。
我的blog,关于技术,软件,linux,vim <---- 所有博客均被河蟹.
头像
5451vs5451
帖子: 345
注册时间: 2006-07-14 18:56
来自: Apple Valley, Planet Tux, Linux System

Re: 问几个关于虚函数的概念--一直没搞懂

#4

帖子 5451vs5451 » 2007-05-28 18:20

gre_linewer 写了:2.可以把析构函数定义为虚函数,但不能将构造函数定义为虚函数.
这句是不是说析构函数是非静态的,而构造函数是静态的
你说对了。
头像
gre_linewer
帖子: 180
注册时间: 2006-11-22 10:57

#5

帖子 gre_linewer » 2007-05-28 19:42

对构造函数是静态的,不是很明白?是不是说内存中只有此类的一个"空间"?
对于缺省构造函数,戴参数的构造函数,拷贝构造函数,赋值构造函数有怎么解释呢?
比如有一个:
class A{
.......//此类定义上述四个构造函数
};
A a;
A b(5);
A c(b);
Ubuntu 8.04
IBM R52-18465DC
CPU:PM 1.73Ghz DDR2:768MB 533Mhz
INTEL 915GM/915PM
ATI Mobility Radeon X300 64MB
40G SATA
头像
gre_linewer
帖子: 180
注册时间: 2006-11-22 10:57

#6

帖子 gre_linewer » 2007-05-28 19:48

to wkt:
"如果想用它做什么 那么换个方法"
"如果硬要它 那么再去翻更多的书"
一般书上都这么说.也没说具体原因;虚函数不是C++ 三大特点之一么?如果换了,特色何以体现?
karron 写了:虚函数的目的就是让子类能够覆盖父类的行为,所以不能是静态函数。
如果是静态的,是不是就只会执行父类的行为?
Ubuntu 8.04
IBM R52-18465DC
CPU:PM 1.73Ghz DDR2:768MB 533Mhz
INTEL 915GM/915PM
ATI Mobility Radeon X300 64MB
40G SATA
wkt
帖子: 849
注册时间: 2006-09-07 22:51
联系:

#7

帖子 wkt » 2007-05-28 20:35

gre_linewer 写了:to wkt:
"如果想用它做什么 那么换个方法"
"如果硬要它 那么再去翻更多的书"
一般书上都这么说.也没说具体原因;虚函数不是C++ 三大特点之一么?如果换了,特色何以体现?
karron 写了:虚函数的目的就是让子类能够覆盖父类的行为,所以不能是静态函数。
如果是静态的,是不是就只会执行父类的行为?
原来你为了这个啊!!
我觉得c++太复杂了
不过那个变量引用我很喜欢!!
为此才用g++编译!!
头像
5451vs5451
帖子: 345
注册时间: 2006-07-14 18:56
来自: Apple Valley, Planet Tux, Linux System

#8

帖子 5451vs5451 » 2007-05-28 21:06

gre_linewer 写了:对构造函数是静态的,不是很明白?是不是说内存中只有此类的一个"空间"?
对于缺省构造函数,戴参数的构造函数,拷贝构造函数,赋值构造函数有怎么解释呢?
比如有一个:
class A{
.......//此类定义上述四个构造函数
};
A a;
A b(5);
A c(b);
构造函数是静态的,因为调用它之前不需要创建一个实例(这正是构造函数的功能),否则根本不可能创建任何实例。此外静态跟重载是两个不同的概念,它们之间是互不冲突的。
头像
gre_linewer
帖子: 180
注册时间: 2006-11-22 10:57

#9

帖子 gre_linewer » 2007-05-28 23:42

关键是几个概念放在一起,很容易搞混的.
偶很愚笨,理解一点.
5451vs5451 写了:否则根本不可能创建任何实例。
是不是可以这样理解:构造函数如果是非静态的(内含this针),必需先创建实例,然后才能调用它?
Ubuntu 8.04
IBM R52-18465DC
CPU:PM 1.73Ghz DDR2:768MB 533Mhz
INTEL 915GM/915PM
ATI Mobility Radeon X300 64MB
40G SATA
回复