标签 C++语言下载 下的文章

C++异常处理在 C++ 中,异常处理是一种处理运行时错误的过程。我们进行异常处理是为了在运行时错误后能够维持应用程序的正常流程。在 C++ 中,异常是在运行时抛出的事件或对象。所有异常都派生自 std::exception 类。它是一个可以被处理的运行时错误。如果我们不处理异常,它会打印异常消息并终止程序。

- 阅读剩余部分 -

C++ 命名空间C++ 中的命名空间用于组织过多的类,以便更容易处理应用程序。要访问命名空间中的类,我们需要使用 namespacename::classname。我们可以使用 using关键字,这样我们就不必一直使用完整的名称。在 C++ 中,全局命名空间是根命名空间。global::std总是指向 C++ 框架的 std 命名空间。

- 阅读剩余部分 -

C++中的数据抽象数据抽象是一种在程序中仅向外界提供必要细节并隐藏内部细节的过程,即在程序中仅表示必要的细节。数据抽象是一种依赖于将程序的接口和实现细节分离的编程技术。让我们以空调为例,它可以开关机、调节温度、调节模式以及其他外部组件如风扇和摆动等。但我们不知道空调的内部细节,即它是如何内部工作的。因此,我们可以说空调将实现细节与外部接口分离。C++提供了高度的抽象性。例如,pow()函数用于计算一个数的幂,而不知道函数遵循的算法。

- 阅读剩余部分 -

C++ 中的接口(抽象类)抽象类是在 C++ 中实现抽象的一种方式。在 C++ 中,抽象是隐藏内部细节,只展示功能的过程。可以通过两种方式实现抽象:抽象类(Abstract Class): 抽象类和接口(Interface)都可以拥有抽象方法,这些抽象方法对于实现抽象是必要的。接口(Interface): 接口是一个抽象的类,其中所有的方法都是纯虚函数。在C++中,接口是通过使用抽象类来实现的,其中所有的方法都是纯虚函数,没有成员变量或实现代码。

- 阅读剩余部分 -

C++虚函数

  • C++虚函数是在基类中重新定义为派生类中的成员函数。
  • 它使用virtual关键字声明。 它用于告诉编译器在函数上执行动态链接或后期绑定。
  • 使用单个指针引用不同类的所有对象是必要的。因此,我们创建指向基类的指针,该指针引用所有派生对象。但是,当基类指针包含派生类对象的地址时,总是执行基类函数。只有使用"virtual"函数才能解决此问题。
  • "virtual"是在普通函数声明之前的关键字。
  • 当函数被声明为虚函数时,C++根据基类指针指向的对象的类型在运行时确定要调用的函数。

后期绑定或动态链接

后期绑定函数调用在运行时解析。因此,编译器在运行时确定对象的类型,然后绑定函数调用。

虚函数的规则

  • 虚函数必须是某个类的成员。
  • 虚函数不能是静态成员。
  • 它们通过对象指针访问。
  • 它们可以是另一个类的友元。
  • 虚函数必须在基类中定义,即使不使用它。 基类和所有派生类的虚函数的原型必须相同。如果两个函数具有相同的名称但具有不同的原型,C++将认为它们是重载的函数。
  • 不能有虚构造函数,但可以有虚析构函数。
  • 考虑当我们不使用虚关键字时的情况。
#include <iostream>
using namespace std;
class A
{
int x=5;
public:
void display()
{
std::cout << "x的值为:" << x<<std::endl;
}
};
class B: public A
{
int y = 10;
public:
void display()
{
std::cout << "y的值为:" <<y<< std::endl;
}
};
int main()
{
A *a;
B b;
a = &b;
a->display();
return 0;
}

输出:

x的值为:5 

在上面的例子中,*a是基类指针。指针只能访问基类成员,而不能访问派生类的成员。尽管C++允许基指针指向从基类派生的任何对象,但它不能直接访问派生类的成员。因此,需要虚函数来允许基指针访问派生类的成员。

C++虚函数示例

让我们看一个在程序中使用C++虚函数调用派生类的简单示例。

#include <iostream>
using namespace std;
class A
{
public:
virtual void display()
{
cout << "基类被调用"<<endl;
}
};
class B:public A
{
public:
void display()
{
cout << "派生类被调用"<<endl;
}
};
int main()
{
A* a; // 基类指针
B b; // 派生类对象
a = &b;
a->display(); // 发生后期绑定
}

输出:

派生类被调用

纯虚函数

  • 虚函数不用于执行任何任务。它只充当占位符。
  • 当函数没有定义时,这样的函数称为"do-nothing"函数。
  • 这样的"do-nothing"函数称为纯虚函数。纯虚函数是在基类中声明的没有与基类相关的定义的函数。
  • 包含纯虚函数的类不能用于声明自己的对象,这样的类称为抽象基类。
  • 基类的主要目标是为派生类提供特性,并创建用于实现运行时多态性的基指针。

纯虚函数可以定义为:

virtual void display() = 0;

让我们看一个简单的例子:

#include <iostream>
using namespace std;
class Base
{
public:
virtual void show() = 0;
};
class Derived : public Base
{
public:
void show()
{
std::cout << "派生类派生自基类。" << std::endl;
}
};
int main()
{
Base *bptr;
//Base b;
Derived d;
bptr = &d;
bptr->show();
return 0;
}

输出:

派生类派生自基类。

在上面的例子中,基类包含了纯虚函数。因此,基类是一个抽象基类。我们不能创建基类的对象。

C++函数重写如果派生类定义了与其基类中定义的相同函数,这在C++中被称为函数重写。它用于实现运行时多态性。它使您能够为已由其基类提供的函数提供特定的实现。C++函数重写示例让我们看一个C++中函数重写的简单示例。在这个例子中,我们正在重写eat()函数。

- 阅读剩余部分 -

C++多态性术语"多态性"是"poly" + "morphs"的组合,意思是"多种形式"。这是一个希腊词。在面向对象编程中,我们使用三个主要概念:继承、封装和多态性。多态性的真实生活例子让我们考虑一个多态性的真实生活例子。一个女士在教室中表现得像一位老师,在家中像母亲或女儿,在市场中像一个顾客。在这里,一个人根据情况的不同而表现得不同。

- 阅读剩余部分 -

C++聚合(HAS-A关系)在C++中,聚合是一个过程,其中一个类将另一个类定义为其实体引用。这是重用类的另一种方式。它是表示HAS-A关系的一种关联形式。C++聚合示例让我们看一个聚合的例子,其中Employee类具有Address类的引用作为数据成员。通过这种方式,它可以重用Address类的成员。

- 阅读剩余部分 -