c++中虚成员的目的是什么?
What is the purpose of Virtual member in C++?
在类中,除了安全之外,我看不出虚成员的作用。在设计实现时使用virtual还有其他的原因吗?编辑:我擦掉了变量部分
不存在虚变量,只有虚函数或虚继承。因此,缺乏目的似乎是一件好事。
编辑:虚函数是c++实现运行时多态性的方式。试图解释多态性的用途/目的可能有点超出了一个合理大小的帖子的范围。但是,一般的思想是,您可以在基类中定义某种类型的行为,然后在每个派生类中以不同的方式实现该行为。对于一个比大多数更实际的例子,考虑一个基本的database
类,它定义了诸如查找符合某些标准的一组记录之类的事情。然后,您可以通过一种方式(通过生成SQL)和另一种方式(例如MongoDB)实现该行为。其中一个的实现将与另一个有很大的不同,但抽象地看,它们仍然都在做相同的基本事情(查找/读取/写入记录)。
我将回答…在代码!
#include <string>
struct Base
{
// virtual int MemberVariable; // This is not legal C++. Member variables cannot be virtual.
virtual ~Base() {} // Required for polymorphism.
std::string NotVirtual()
{
return "In Base.";
}
virtual std::string Virtual()
{
return "In Base.";
}
};
struct Derived: public Base
{
std::string NotVirtual()
{
return "In Derived.";
}
std::string Virtual()
{
return "In Derived.";
}
};
int main()
{
Base* BasePointer = new Derived;
std::string StringFromBase = BasePointer->NotVirtual(); // "In Base.";
std::string StringFromDerived = BasePointer->Virtual(); // "In Derived."
delete BasePointer;
return 0;
}
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 指针类型类成员的动态强制转换的恒定性是什么?
- 删除类成员的动态分配内存的最佳方法是什么
- 初始化类成员的更好做法是什么?
- 键入擦除成员函数指针的"right"方法是什么?
- 使用只有一个成员的工会的目的是什么?
- 什么是指向成员模板参数的指针
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 命名空间 Win 没有成员"simpleControl"是什么意思
- 在多个对象中初始化预定义成员变量的正确方法是什么?
- 在不编写显式 setter 的情况下修改私有类数据成员的便捷方法是什么?模板有用吗?
- 这个星号 (*) 符号在 C++ 中是什么意思?-- 指向成员的指针
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- 返回没有 typedef 的成员函数指针的语法是什么?
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 使用泛型成员变量"placement new"结构/类数组的正确方法是什么?
- 从C++与 C 灵活阵列成员互操作的正确方法是什么?
- 删除数组成员的更好方法是什么?