乐闻世界logo
搜索文章和话题

What is the private virtual method in C++

4 个月前提问
3 个月前修改
浏览次数29

1个答案

1

在C语言中,概念上并没有“私有虚拟方法”,因为这是面向对象编程(OOP)中的概念,而C是一种过程式编程语言,不支持类和虚拟函数等面向对象的特性。

但是,我们可以通过一些技巧在C中模拟出类似于面向对象的行为,比如使用结构体来模拟对象,以及通过函数指针在结构体中模拟虚拟方法。至于“私有”,在C中可以通过将函数声明为静态(static)来限制其在定义它的文件之外的可见性,从而达到类似于面向对象中的“私有”方法的效果。

示例:

假设我们想在C中模拟一个简单的“动物”类,其中有一个虚拟方法叫做makeSound,但我们希望这个方法在结构体外部不可调用,即表现为“私有”方法。

首先,定义一个动物结构体和一个对应的函数指针类型:

c
typedef struct Animal Animal; typedef void (*MakeSoundFunc)(Animal *); struct Animal { MakeSoundFunc makeSound; };

然后定义一个静态函数来实现这个虚拟方法。由于这个函数是静态的,它不会在这个文件之外可见:

c
static void animalMakeSound(Animal *self) { printf("Some generic animal sound\n"); }

现在,我们可以在文件内部创建和初始化这个“Animal”类型的实例,并通过指针间接调用这个方法:

c
void initAnimal(Animal *animal) { animal->makeSound = animalMakeSound; } int main() { Animal myAnimal; initAnimal(&myAnimal); myAnimal.makeSound(&myAnimal); // 调用虚拟方法,输出:"Some generic animal sound" return 0; }

在这个例子中,我们通过结构体和函数指针成功模拟了一个带有虚拟功能的面向对象模式,同时,animalMakeSound函数由于是静态的,因此它在模块外部是不可见的,起到了类似私有方法的作用。

2024年6月29日 12:07 回复

你的答案