C++ 中什么样的函数可以作为虚函数
展开全部
二,哪些函数不能成为虚函数?
1.内联函数:我们都知道内联函数只是在函数调用点将其展开,它不能产生函数符号,所以不能往虚表中存放,自然就不能成为虚函数。
2.静态函数:定义为静态函数的函数,这个函数只和类有关系,它不完全依赖于对象调用,所以也不能成为虚函数。
3.构造函数:都知道只有当调用了构造函数,这个对象才能产生,如果把构造函数写成虚函数,这时候我们的对象就没有办法生 成。更别说用对象去调用了。所以构造函数不能成为虚函数。
4.友元函数:友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。
5.普通函数:普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会在编译时绑定函数。
三,哪些函数可以成为虚函数呢?
1.普通的成员方法是可以成为虚函数的
2.还有析构函数,因为析构函数是为了释放对象的,所以之前我们的对象已经生成,而且析构函数可以取地址,所以可以成为虚函数。
————————————————
版权声明:本文为CSDN博主「u010765526」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010765526/article/details/106752135/
1.内联函数:我们都知道内联函数只是在函数调用点将其展开,它不能产生函数符号,所以不能往虚表中存放,自然就不能成为虚函数。
2.静态函数:定义为静态函数的函数,这个函数只和类有关系,它不完全依赖于对象调用,所以也不能成为虚函数。
3.构造函数:都知道只有当调用了构造函数,这个对象才能产生,如果把构造函数写成虚函数,这时候我们的对象就没有办法生 成。更别说用对象去调用了。所以构造函数不能成为虚函数。
4.友元函数:友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。
5.普通函数:普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会在编译时绑定函数。
三,哪些函数可以成为虚函数呢?
1.普通的成员方法是可以成为虚函数的
2.还有析构函数,因为析构函数是为了释放对象的,所以之前我们的对象已经生成,而且析构函数可以取地址,所以可以成为虚函数。
————————————————
版权声明:本文为CSDN博主「u010765526」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010765526/article/details/106752135/
展开全部
虚函数
的意义在于
动态联编
,也就是说,函数在运行是才确定,而不是在编译的时候确定;
例如:
class
A
{
public:
virtual
void
foo()
{
cout<<"A::foo()
is
called"<<endl;
}
};
class
B:public
A
{
public:
void
foo()
{
cout<<"B::foo()
is
called"<<endl;
}
};
int
main(void)
{
A
*a
=
new
B();
a->foo();
//
在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!
return
0;
}
http://c.biancheng.net/cpp/biancheng/view/244.html
的意义在于
动态联编
,也就是说,函数在运行是才确定,而不是在编译的时候确定;
例如:
class
A
{
public:
virtual
void
foo()
{
cout<<"A::foo()
is
called"<<endl;
}
};
class
B:public
A
{
public:
void
foo()
{
cout<<"B::foo()
is
called"<<endl;
}
};
int
main(void)
{
A
*a
=
new
B();
a->foo();
//
在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!
return
0;
}
http://c.biancheng.net/cpp/biancheng/view/244.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询