C++纯虚函数实现

简介: 纯虚函数就是一个在基类中的虚函数,差别只是在一般的虚函数声明的后面加了“=0”,虚函数允许函数通过与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,称为运行时的多态性,虚函数是可以有具体实现代码的。

纯虚函数就是一个在基类中的虚函数,差别只是在一般的虚函数声明的后面加了“=0”,虚函数允许函数通过与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,称为运行时的多态性,虚函数是可以有具体实现代码的。那么,为什么要有纯虚函数?在基类中的函数只有说明而没有具体定义的时候,不执行有意义的操作,也没有具体去实现代码,于是在派生类中就可以实现具体的操作,无论是单继承也好,还是多继承也好,重新定义这个在基类声明的函数,这个函数的实现可以根据需求去实现,咱们来看一个例子:

#include <iostream>
#include <cstring>
using namespace std ;
//动物类是基类 
class Animal
{
	private :
		string name ; 
		int age ;
		char sex ; 
		int score ;
	public :
		//声明纯虚函数 
		virtual int setdog(string name , int age ,char sex , int score) = 0 ;
		virtual void show() = 0;
};

//狗也是动物,狗类是动物类的 派生类 
class Dog : public Animal
{
	private:
	string name ; 
	int age ;
	char sex ; 
	int score ;	
	public:
		int setdog(string name , int age , char sex , int score);
		void show()
		{
			cout << "Dog name:" << this->name << endl ;
			cout << "Dog age:" << this->age << endl ;
			cout << "Dog sex:" << this->sex << endl ;
			cout << "Dog score:" << this->score << endl ;
		}
};

int Dog::setdog(string name , int age , char sex , int score)
{
	this->name = name ; 
	this->age = age ; 
	this->sex = sex ; 
	this->score = score ;
}


int main(void)
{
	Animal *ptr ; 
	Dog dog ; 
	ptr = &dog ;
	ptr->setdog("HUAHUA",3,'Y',66);
	ptr->show();
	return 0 ;
}
狗类是动物类的派生类,动物类作为基类,没有具体实现setdog和show方法,在狗类中实现了这两个方法,这两个方法也被称之为派生类的虚函数。

通过指针ptr指向派生类对象,调用派生类对象的虚函数。

运行结果:

Dog name:HUAHUA

Dog age:3

Dog sex:Y

Dog score:66


目录
相关文章
|
4月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
95 0
|
7月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
362 6
|
7月前
|
存储 编译器 C++
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本文介绍了面向对象编程中的多态特性,涵盖其概念、实现条件及原理。多态指“一个接口,多种实现”,通过基类指针或引用来调用不同派生类的重写虚函数,实现运行时多态。文中详细解释了虚函数、虚函数表(vtable)、纯虚函数与抽象类的概念,并通过代码示例展示了多态的具体应用。此外,还讨论了动态绑定和静态绑定的区别,帮助读者深入理解多态机制。最后总结了多态在编程中的重要性和应用场景。 文章结构清晰,从基础到深入,适合初学者和有一定基础的开发者学习。如果你觉得内容有帮助,请点赞支持。 ❤❤❤
870 0
|
12月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
12月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
448 6
|
12月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
109 3
|
12月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
199 0
C++ 多线程之线程管理函数
|
12月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
84 3
|
12月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
2082 1
|
12月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
139 1