c 抽象类怎么写

有时无法在基类中提供所有函数的实现,因为我们不知道实现。这样的类称为抽象类。 例如,让Shape为基类。我们不能在Shape中提供函数draw()的实现,但是我们知道每个派生类都必须具有draw()的实现。类似地,Animal类没有move()的实现(假设所有动物都移动),但所有动物都必须知道如何移动。我们无法创建抽象类的对象。

C ++中的纯虚函数(或抽象函数)是我们没有实现的虚函数,我们只声明它。通过在声明中赋值0来声明纯虚函数。请参阅以下示例。

// An abstract class

class Test

{

// Data members of class

public:

// Pure Virtual Function

virtual void show() = 0;

/* Other members */

};

一个完整的示例:

纯虚函数由派生自Abstract类的类实现。以下是演示相同的简单示例。

#include<iostream>

using namespace std;

class Base

{

int x;

public:

virtual void fun() = 0;

int getX() { return x; }

};

// This class inherits from Base and implements fun()

class Derived: public Base

{

int y;

public:

void fun() { cout << "fun() called"; }

};

in原由网t mwww.58yuanyou.comain(void)

{

Derived d;

d.fun();

return 0;

}

输出:

fun()调用

一些有趣的事实:

1) 如果一个类至少有一个纯虚函数,那么它就是抽象的。

在下面的示例中,Test是一个抽象类,因为它具有纯虚函WQAkpaluPo数show()。

// pure virtual functions make a class abstract

#include<iostream>

using namespace std;

class Test

{

int x;

public:

virtual void show() = 0;

int getX() { return x; }

};

int main(void)

{

Test t;

return 0;

}

输出:

编译器错误:无法将变量't'声明为抽象

输入'Test',因为以下虚函数是纯函数

在'Test'中:注意:virtual void Test :: show()

2) 我们可以有抽象类类型的指针和引用。

例如,以下程序工作正常。

#include<iostream>

using namespace std;

class Base

{

public:

virtual void show() = 0;

};

class Derived: public Base

{

public:

void show() { cout << "In Derived \n"; }

};

int main(void)

{

Base *bp = new Derived();

bp->show();

return 0;

}

输出:

在衍生

3) 如果我们不在派生类中覆盖纯虚函数,那么派生类也会变成抽象类。

以下示例演示了相同的内容。

#include<iostream>

using namespace std;

class Base

{

public:

virtual void show() = 0;

};

class Derived : public Base { };

int main(void)

{

Derived d;

return 0;

}

编译器错误:无法将变量'd'声明为抽象类型

'衍生',因为以下虚拟功能是纯粹的

'Derived':虚拟void Base :: show()

4) 抽象类可以有构造函数。

例如,以下程序编译并运行正常。

#include<iostream>

using namespace std;

// An abstract class with constructor

class Base

{

protected:

int x;

public:

virtual void fun() = 0;

Base(int i) { x = i; }

};

class Derived: public Base

{

int y;

public:

Derived(int i, int j//www.58yuanyou.com):Base(i) { y = j; }

void fun() { cout <&l//www.58yuanyou.comt; "x = " << x << ", y = " << y; }

};

int main(void)

{

Derived d(4, 5);

d.fun();

return 0;

}

输出:

x = 4,y = 5

与Java的比较

在Java中,可以使用abstract关键字使类成为抽象类。类似地,可以使用abstract关键字将函数设置为纯虚拟或抽象。有关更多详细信息,请参阅

Java中的抽象类。

接口与抽象类:

接口没有任何方法的实现,它可以被视为方法声明的集合。在C ++中,可以通过将所有方法都设置为纯虚拟来模拟接口。在Java中,接口有一个单独的关键字。

内容版权声明:除非注明原创否则皆为转载,再次转载请注明出处。

文章标题: c 抽象类怎么写

文章地址: www.58yuanyou.com/jiqiao/244168.html

相关推荐