本文共 1481 字,大约阅读时间需要 4 分钟。
虚函数是面向对象编程中多态的基础,通过它,可以让同一函数在不同子类中有不同的行为。以下是一个简单的例子:
#includeusing namespace std;class Parent {public: void func() { cout << "Parent" << endl; }};class Child : public Parent {public: void func() { cout << "Child" << endl; }};int main() { Child c; c.func(); // 输出 "Child" Parent *p = &c; p->func(); // 输出 "Parent" return 0;}
在上述代码中,函数调用结果是"ChildParent"。这是由于函数调用时已经确定了调用哪个版本的函数,这种现象称为早绑定或静态多态。
如果在Parent
类中定义func
为虚函数:
class Parent {public: virtual void func() { cout << "Parent" << endl; }};
则输出结果会变为"ChildChild"。这表明虚函数的调用取决于对象的类型,而不是指针的指向。这种方式是多态的常规使用方式。
如果子类没有实现纯虚函数:
class Parent {public: virtual void func() = 0;};
这意味着编译器知道函数没有实现,但可以在子类中提供实现。这种情况下,编译器不会生成函数的代码,仅进行符号链接。
C++提供了多种顺序容器,包括vector
、list
和deque
。这些容器都支持随机访问和双向迭代。以下是它们的主要区别:
C++还提供了以下容器适配器:
vector
或array
配合使用。这些容器适配器提供了与底层容器不同的接口,通常用于简化常见操作。
容器可以通过迭代器、c(n)
或c(n, t)
初始化。迭代器适用于所有容器,而c(n, t)
仅适用于顺序容器。例如:
vector vec = c(5, 10); // 初始化为五个10vector vec = cbegin(vec), viter(vec.end());
容器的元素类型必须支持赋值运算,并且对象必须可以复制。引用类型不支持赋值运算,因此不能存储在容器中。
在C++中,迭代器是访问容器元素的重要工具。常见的迭代器操作包括:*it
, it++
, it--
, it == end
, it != begin
等。
某些容器操作会改变容器的内涵,例如erase
函数会删除元素,导致指向这些元素的迭代器失效。因此,在进行这些操作时,应小心使用迭代器。
转载地址:http://pfao.baihongyu.com/