求助,关于C++中虚函数的几个问题

2025-03-01 12:36:18
推荐回答(3个)
回答1:

第二条,你说对了,不加virtual指的是A*p=new B;中A类的成员,加virtual指的是B类的成员,不加virtual编译器就只考虑A*p,认为p是一个A类型的指针,加上virtual,编译器就会考虑后面的new B,知道p实际上是B类型的指针
加不加virtual就是一种语法,是c 为了实现动态绑定而规定的语法,知道就行了,不用深究
只要记住,父类函数不加virtual,就是=号左边的类型,加上virtual,就是=号右边的类型
前提是这两个类是继承关系,左边是父类,右边是子类

回答2:

1 new的时候所指定的类型就是指针的实际类型,也就是虚函数的真正调用对象。
2 虚函数的virtual在父类声明后,其派生类的对应方法都是虚的
3 调用的时候,系统会判断指针到底是son还是father,进而调用对应的虚函数。
4 如果子类不重写虚函数,那么父类的虚函数会被拿来顶包

回答3:

virtual 多态表现形式。含有virtual的类,会自己信息来标记这个类。

每个含有virtual的类都创建一张vtalble 表,用来存放虚函数的地址的,通过vptr指向vtable从而可以
准确的指向要调用的函数。

可以试试用 带虚函数的类和不带虚函数的类的区别。
class A { public: vitrual int a(){}};
class B{ public: int a(){}};

cout << sizeof(A) << " " << sizeof(B)
查看隐藏的信息