C++教程-C++中的数据抽象
C++中的数据抽象数据抽象是一种在程序中仅向外界提供必要细节并隐藏内部细节的过程,即在程序中仅表示必要的细节。数据抽象是一种依赖于将程序的接口和实现细节分离的编程技术。让我们以空调为例,它可以开关机、调节温度、调节模式以及其他外部组件如风扇和摆动等。但我们不知道空调的内部细节,即它是如何内部工作的。因此,我们可以说空调将实现细节与外部接口分离。C++提供了高度的抽象性。例如,pow()函数用于计算一个数的幂,而不知道函数遵循的算法。
笨鸟教程,涵盖Intellij IDEA教程,PyCharm教程,GoLand教程,WebStorm教程,ChatGPT教程,AI绘画教程,Obsidian教程, Notion教程,Midjourney教程,Java教程,Python教程,Golang教程,AI工具等各类AI编程教程。
后期绑定函数调用在运行时解析。因此,编译器在运行时确定对象的类型,然后绑定函数调用。
#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++虚函数调用派生类的简单示例。
#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(); // 发生后期绑定
}
输出:
派生类被调用
纯虚函数可以定义为:
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;
}
输出:
派生类派生自基类。
在上面的例子中,基类包含了纯虚函数。因此,基类是一个抽象基类。我们不能创建基类的对象。