上面那句话说派生类没有对纯虚函数定义,则这个派生类也是抽象类不能定义对象,
后面那句话又说除非在派生类用“=0”把它声明为纯虚函数,否则它就不是纯虚函数,(那如果不是纯虚函数,那这个类就不是抽象类了,不是抽象类就可以定义对象了,不是和前面那句话矛盾吗?)初学C++,希望能详细指教下
第一段里面的函数指的是基类里的函数,子类里把它实现了它自然就不再是虚函数了。
读文章要看上下文,不要钻牛角尖。
-=-=-=-=-=-=-=-=-=-=-=-=-=
首先,纯虚函数只在抽象基类中存在,子类中不存在纯虚函数,但是也可能是个虚函数。如果子类中存在虚函数(没有实现全部的纯虚函数),那么子类依然是个抽象类,是不可以实例化的。
换人话说,能实例化的类里面必须每个函数都可以执行,不可以有不能执行的函数。
其实最根本的原因还是你没有读懂第一段话的意思。
基类如果是抽象类,那么里面的虚函数就叫做纯虚函数。
后面说的是子类里要不要实现基类里的纯虚函数,实现了如何,不实现又如何,可不是说子类里如果把它实现了,那么连基类里的叫法也要跟着变。
上面那句话是对的啊,下面也没错,只不过一个说的是抽象类的概念,一个说的是纯虚函数的概念,没矛盾啊
子类虽然没有定义纯虚函数,但由于它继承的是纯虚类,并且没有重写所有的纯虚函数,所以这个子类仍旧是个抽象类,不能定义实例。所以你归纳的“如果不是纯虚函数,那这个类就不是抽象类了”并不准确。
1.纯虚函数就是virtual void fun()=0;这种以=0结尾的函数,如果没有=0这个,就不是纯虚函数。
2.如果A类中有纯虚函数,B类继承A,也就继承了A的纯虚函数,如果B没有实现A类的纯虚函数,那么就相当于B类中有纯虚函数,B就是一个虚基类,虚基类不能实例化。
以上,如有帮助,请帮忙采纳一下,谢谢啦
好像没问题,你捋一下逻辑,派生类是由抽象类派生而来,就是说无论定义不定义,纯虚函数在派生类里都不能被称为纯虚函数。或者说,只要对一个纯虚函数进行了定义,它就不是抽象类,而其他的纯虚函数是无所谓的,除非你在派生类时啥也不定义,才能时抽象类。