虚函数与纯虚函数的区别,我的理解是不是子类的函数实现了父类的函数,但是重写了方法,就是纯虚函数

rain_dyy2022-10-04 11:39:541条回答

已提交,审核后显示!提交回复

共1条回复
Google测试员258 共回答了13个问题 | 采纳率100%
1. lz的理解还是有些出入.虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是:
(1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码.
(2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以.
2. 虚函数的引入主要是为了实现多态,这部分内容是c++的精髓.
3. lz不懂可继续追问
1年前

相关推荐

虚函数的作用是什么?
chenshizhou0071年前1
老品种 共回答了16个问题 | 采纳率75%
可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时,
基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,
而不是基类中定义的成员函数(只要派生类改写了该成员函数).
若不是虚函数,则不管基类指针指向的哪个派生类对象,调用时都
会调用基类中定义的那个函数.
下面函数中,可以作为虚函数的是( )
下面函数中,可以作为虚函数的是( )
下面函数中,可以作为虚函数的是( )
A 普通函数 B 默认构造函数 C 带参构造函数 D 析构函数
29 下面的描述,正确的是( )
A 虚函数是没有实现的函数 B纯虚函数在基类中给出具体的实现
C 抽象类是没有纯虚函数的类 D 抽象类指针可以指向不同的派生类
30 下面对友元的错误描述是( )
A 关键字friend用于声明友元 B 某个函数可以是一个类的友元
C 友元函数访问对象的成员不受访问特性影响 D 友元函数通过this指针访问成员对象
eddieren1年前1
浪子A飞 共回答了14个问题 | 采纳率92.9%
28.选D,只有类的成员函数及类的析构函数可以作为虚函数.
29.选D,A.可以给虚函数写实现代码,B.在基类和子类都可以.C,说反了.
30.选D,友元函数通过类的指针访问类成员函数,不是this,他都不是要访问那个类的成员函数,怎么用this去访问他.
下列关于虚函数的说明中正确的是 .A.从虚基类继承的函数都是
下列关于虚函数的说明中正确的是 .A.从虚基类继承的函数都是虚函数 B.
下列关于虚函数的说明中正确的是 .
A.从虚基类继承的函数都是虚函数 B.虚函数不得是静态成员函数
C.只能通过指针或引用调用虚函数 D.抽象类中的成员函数都是虚函数
iamtjwangfeng1年前1
wormcool 共回答了17个问题 | 采纳率100%
B
试分析函数的重载、函数的覆盖继承和虚函数三者之间的区别
试分析函数的重载、函数的覆盖继承和虚函数三者之间的区别
急!
huwenbo1年前1
dotta 共回答了17个问题 | 采纳率88.2%
简单地说函数的重载只会发生在一个类中
覆盖
1.基函数必须是虚函数
2.发生覆盖的两个函数要分别位于派生类与基类中
3.函数名称与参数列表必须完全相同
由于C++的多态性是通过虚函数来实现的,所以函数的覆盖总是和多态关联在一起
C++多态性体现在虚函数中也就是说编译时无法确定类型,而在运行时根据实际的类型对象调用相应的函数
还有派生类的函数与基类的函数完全相同,只是基类的函数没有使用virtual关键字,此时基类的函数将被隐藏,而不是覆盖
派生类的函数与基类的函数同名,但参数列表不同,在这种情况下,不管基类的函数声明是否有virtual关键字,基类的函数都将被隐藏,注意这种情况与函数重载的区别
几道C++选择题(1)关于虚函数的描述中,( )是正确的。A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函
几道C++选择题
(1)关于虚函数的描述中,( )是正确的。
A.虚函数是一个静态成员函数
B.虚函数是一个非成员函数
C.虚函数既可以在函数说明时定义,也可以在函数实现时定义
D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型
(2)C++类体系中,不能被派生类继承的有( )。
A.构造函数 B.虚函数 C.静态成员函数 D.赋值操作函数
(3)下面4个选项中,( )是用来声明虚函数的。
A.virtual B.public C.using D.false
(4)编译时的多态性可以通过使用( )获得。
A.虚函数和指针 B.重载函数和析构函数 C.虚函数和对象 D.虚函数和引用
(5)关于纯虚函数和抽象类的描述中,错误的是( )。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具有纯虚函数的类
C.一个基类中声明有纯虚函数,该基类派生的类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
(6)下列描述中,( )是抽象类的特征。
A.可以说明虚函数 B.可以进行构造函数重载
C.可以定义友元函数 D.不能生成其对象
(7)以下( )成员函数表示虚函数。
A.virtual int vf(int); B.void vf(int)=0;
C.virtual void vf()=0; D.virtual void vf(int) { };
(8)如果一个类至少有一个纯虚函数,那么就称该类为( )。a
A.抽象类 B.虚函数 C.派生类 D.以上都不对
(9)下面描述中,正确的是( )。
A.virtual可以用来声明虚函数
B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类
C.即使基类的构造函数没有参数,派生类也必须建立构造函数
D.静态数据成员可以通过成员初始化列表来初始化
以下叙述不正确的是( )使用静态数据成员:
A.可以节省内存空间 B.是为了解决数据共享问题
C.可以直接用类名来引用 D.可以提高序运算速度
唧唧猫1年前1
benbenlcc2 共回答了24个问题 | 采纳率91.7%
A A A C C D D A A D
C++的4道选择题(1)下列关于虚函数与函数重载区别的叙述中不正确的是  A)函数说明形式上不同  B)函数重载允许是非
C++的4道选择题
(1)下列关于虚函数与函数重载区别的叙述中不正确的是
  A)函数说明形式上不同
  B)函数重载允许是非成员函数,虚函数只能是成员函数
  C)函数重载的调用依据参数和类型的差别,虚函数则依据对象
  D)函数重载的本体可以在类外定义,虚函数不可以(2)下面描述中体现了抽象类特性的语句是
  A)可以说明虚函数
  B)可以进行构造函数重载
  C)可以定义友元函数
  D)不能说明其对象(3)下列关于虚基类的描述中错误的是
  A)虚基类子对象的初始化由最派生类完成
  B)虚基类子对象的初始化次数与虚基类下面的派生类个数有关
  C)设置虚基类的目的是消除二义性
  D)带有虚基类的多层派生类构造函数的成员初始化列表中都要列出对虚基类构造函数调用
(4) 以下有关类与结构体关系的叙述不正确的是
  A)结构体中只包含数据;类中封装了数据和操作
  B)结构体的成员对外界通常是开放的;类的成员可以被隐蔽
  C)用struct不能声明一个类型名;而class可以声明一个类名
  D)结构体成员默认为puhlic;类成员默认为private
pzhhrj1年前4
luopidong 共回答了16个问题 | 采纳率62.5%
(1)下列关于虚函数与函数重载区别的叙述中不正确的是(B)
  A)函数说明形式上不同(对,明显不同,声明的关键字都不同,虚函数用virtual,而重载是参数
列表不同)
  B)函数重载允许是非成员函数,虚函数只能是成员函数(函数重载可以是成员函数,后一句对)
  C)函数重载的调用依据参数和类型的差别,虚函数则依据对象(对,重载是参数列表不同,而虚
函数...
怎样改造函数(高中数学)怎样把虚拟函数构造成实函数,例如书上把虚函数f(x)=1/4,4f(x)f(y)=f(x+y)+
怎样改造函数(高中数学)
怎样把虚拟函数构造成实函数,例如书上把虚函数f(x)=1/4,
4f(x)f(y)=f(x+y)+f(x-y),(x,y∈R),构造成实函数f(x)=0.5cos(π/3 x),
书上是怎样构造的?像这种函数的构造有什么规律或方法吗?
希望能帮助延伸一下,常用的函数虚函数模型是这样的?
请高手指点,详细点,拜托了,谢谢!
唐山黑hh1年前1
huangjin20081011 共回答了14个问题 | 采纳率100%
f(x+3)=-f(3-x)
f(x)=f(-x) 表示偶函数
f(x)=-f(-x) 表示奇函数
所以f(x+3)=-f(-x-3)才是奇函数
关于f(x+3)=-f(3-x)
可令x=x-3得
f(x-3+3)=-f(3-x+3)
即 f(x)=-f(6-x)
类比 f(x)=-f(-x) 表示奇函数
即 x 与 x-6 对称,故得出以点(3,0)为对称中心的结论.
f(x)f(y)=f(x-y)/2+f(x+y)/2,就是cosacosb=cos(a-b)+cos(a+b)/2
f(x+y)=f(x)f(y),可以用对数函数去带一下,f(xy)=f(x+y)可以用指数函数带一下
用虚的表示实的不一定合适做题 但小题目可以用 还方便...
f(x)=1/-f(x+2) 表示的是以4为周期的函数 用x=x+2 则f(x+2)=1/-f(x+4)
则f(x)=f(x+4) 还有好多 可以多看看资料书上的 一般不会太难...
希望对你有帮助...
下面函数中,可以作为虚函数的是( ) A 普通函数 B 默认构造函数 C 带参构造函数 D 析构函数
下面函数中,可以作为虚函数的是( ) A 普通函数 B 默认构造函数 C 带参构造函数 D 析构函数
下面函数中,可以作为虚函数的是( )
A 普通函数 B 默认构造函数 C 带参构造函数 D 析构函数
roseran1年前1
暗夜幽谷 共回答了15个问题 | 采纳率86.7%
A和D应该是都可以的,
C++虚函数的应用输入圆柱体的底圆半径和圆柱体的高,求出底面面积、表面积、及其体积.要求用虚函数实现.
liy200001年前1
yejing12345 共回答了20个问题 | 采纳率85%
只能给你个思路,具体代码还要你自己来补充,毕竟学到虚函数这一块,相信你在代码编写方面已经足以解决问题了,只是不大明白怎么使用虚函数而已
事实上虚函数说起来只是提供一个框架,限定了返回值的类型,参数类型和个数,但是具体的函数实现却没有提供,这也是为了让派生类实现多态性的手段.
以下是shape这个基类的一个求面积area()的虚函数,以及他的派生类cylinder对这个虚函数的继承和多态(注意,构造函数不能是虚函数).当在基类中声明area()为虚函数的时候,意味着你希望area()函数的实现(也就是具体的函数代码编写)在shape的派生类cylinder中能够修改,也就意味着,如果是圆柱体,则写圆柱体的面积的实现代码,如果是圆锥则写圆锥的面积的实现代码
class shape{
public:
shape (){ };
virtual flaot area();
}
class cylinder :public shape{
public:
cylinder (){};
float area (){//具体的计算cylinder的代码};
}
main(){
cylinder A;
float A_area;
A_area=A.area();
}
//你需要的是把代码完善就好,如果还有什么地方不明白的,可以Hi我
编写一个程序计算三角形、正方形和圆形三种图形的面积.依题意,可以抽象出一个基类base,在其中说明一个虚函数,用来求面积
编写一个程序计算三角形、正方形和圆形三种图形的面积.依题意,可以抽象出一个基类base,在其中说明一个虚函数,用来求面积.并利用单接口、多实现版本设计各个图形面积的方法.例如,使得下面的主函数
int main() {
x09base *p;
x09triangle t(20,20);x09//第一个参数为三角形底边,第二个参数为底边上的高
x09square s(20);
x09circle c(20);
x09p = &t;
x09p->disp();
x09p = &s;
x09p->disp();
x09p = &c;
x09p->disp();
x09return 0;
}
的运行结果为:
三角形面积:200
正方形面积:400
圆形面积:1256.6
网不住的小鱼1年前1
eyeseyes 共回答了21个问题 | 采纳率76.2%
#include
#include
#include
using namespace std;
class base
{
public:
virtual void disp() = 0;
};
class triangle : public base
{
public:
triangle(int base, int height) : m_base(base), m_height(height) {}
void disp()
{
cout
以下关于虚函数的叙述中不正确的是
以下关于虚函数的叙述中不正确的是
  A)虚函数属于成员函数
  B)虚函数不允许说明成静态的
  C)凡是虚函数必须用virtual说明
  D)虚函数可以被继承
可茄子1年前1
ROFL 共回答了17个问题 | 采纳率94.1%
c是错的,继承的时候,不用virtual,就能实现虚函数.只要父类说明了.