C++中不能声明为虚函数的有哪些函数
2个回答
展开全部
,不能被override
多态的运行期行为体现在虚函数上,虚函数通过继承方式来体现出多态作用,顶层
这个原因很简单,主要是从语义上考虑,所以不支持。因为构造函数本来就是为了明确初始化对象成员才产生的,然而
virtual function
主要是为了再不完全了解细节的情况下也能正确处理对象。另外,
1)构造函数不能被继承,因而不能声明为virtual函数
(2)构造函数一般是用来初始化对象,只有在一个对象生成之后,才能发挥多态
作用,如果将构造函数声明为virtual函数,则表现为在对象还没有生成的情
其实很简单,那内联函数就是为了在代码中直接展开,减少函数调用花费的代价,虚函数是为了在继承后对象能够准确的执行自己的动作,这是不可能统一的。(再说了,
inline函数在编译时被展开,虚函数在运行时才能动态的邦定函数)
不支持友元函数为虚函数?因为C++
不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。友元函数不属于类的成员函数,不能被继承。
* Author: china*/#include <iostream
using namespace std;class B {public:B() {cout << 基类构造 << endl;}/*在类的继承中,如果有基类指针指向派生类,那么用基类指针delete时,如果不定义成虚函数,派生类中派生的那部分无法析构。
* 你可以吧virtual去掉试一下
* 因此在类的继承体系中,基类的析构函数不声明为虚函数容易造成内存泄漏。所以如果你设计一定类可能是基类的话,必须要声明其为虚函数。
* */virtual ~B() {
cout << 基类析构 << endl;}virtual void func() {
cout << 基类的func() << endl;}private:};class D :public B{public:D() {cout << 派生类构造 << endl;}~D() {cout << 派生类析构 << endl;}void func() {
cout << 派生类的func() << endl;}private:};int main(int argc, char **argv) {
D d; //调用构造先有对象
多态的运行期行为体现在虚函数上,虚函数通过继承方式来体现出多态作用,顶层
这个原因很简单,主要是从语义上考虑,所以不支持。因为构造函数本来就是为了明确初始化对象成员才产生的,然而
virtual function
主要是为了再不完全了解细节的情况下也能正确处理对象。另外,
1)构造函数不能被继承,因而不能声明为virtual函数
(2)构造函数一般是用来初始化对象,只有在一个对象生成之后,才能发挥多态
作用,如果将构造函数声明为virtual函数,则表现为在对象还没有生成的情
其实很简单,那内联函数就是为了在代码中直接展开,减少函数调用花费的代价,虚函数是为了在继承后对象能够准确的执行自己的动作,这是不可能统一的。(再说了,
inline函数在编译时被展开,虚函数在运行时才能动态的邦定函数)
不支持友元函数为虚函数?因为C++
不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。友元函数不属于类的成员函数,不能被继承。
* Author: china*/#include <iostream
using namespace std;class B {public:B() {cout << 基类构造 << endl;}/*在类的继承中,如果有基类指针指向派生类,那么用基类指针delete时,如果不定义成虚函数,派生类中派生的那部分无法析构。
* 你可以吧virtual去掉试一下
* 因此在类的继承体系中,基类的析构函数不声明为虚函数容易造成内存泄漏。所以如果你设计一定类可能是基类的话,必须要声明其为虚函数。
* */virtual ~B() {
cout << 基类析构 << endl;}virtual void func() {
cout << 基类的func() << endl;}private:};class D :public B{public:D() {cout << 派生类构造 << endl;}~D() {cout << 派生类析构 << endl;}void func() {
cout << 派生类的func() << endl;}private:};int main(int argc, char **argv) {
D d; //调用构造先有对象
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询