C ++ polimorfismo (b) --- clases abstractas y nuevo C ++ 11

polimorfismo C ++

clase abstracta

definiciones

En concepto orientado a objetos, todos los objetos son descritos por la clase, pero, por el contrario, no todas las clases se utiliza para describir el objeto, si una clase no contiene suficiente información para describir una determinada objetos, una clase de este tipo es una clase abstracta.
función virtual pura C ++ de una manera de implementar las funciones de la clase abstracta

C ++ clase implementa la forma abstracta

Detrás de función virtual pura para mantenerse al día = 0, entonces la función es una función virtual pura. Que contiene funciones virtuales puras se llama una clase abstracta (clase de interfaz), la clase abstracta no objetos instanciar porque no hay métodos de clase abstractos específicos, así que no una instancia del objeto después de la herencia deriva clases no puede crear una instancia del objeto, sólo la base anulaciones clase abstracta de clase a una instancia de un objeto.

class A
{
	virtual void Func() = 0;
};

int main()
{
	A a; //error
}

Aquí Insertar imagen Descripción
de manera abstracta herencia múltiple

class A
{
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func()
	{
		cout << "virtual B::Func()" << endl;
	}
};

int main()
{
	B b;
}

C ++ 11 nuevas características

override y final de
  • Cuando se utiliza el override función virtual modificado:clase derivada tabla de función virtual Modificado anular la fuerza la función virtual
class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func() override //表示强制重写虚函数
	{
		cout << "virtual B::Func()" << endl;
	}
};

int main()
{
	A *b = new B();
	b->Func(); //编译器会首先检测其静态类型是否合法
}
  • Cuando se utiliza el final de función virtual modificado:Representa una modificación de la función virtual no puede ser cambiada en una clase derivada
class A
{
public:
	virtual void Func() = 0;
};

class B : public A
{
public:
	virtual void Func() final //表示禁止再被重写
	{
		cout << "virtual B::Func()" << endl;
	}
};

class C : public B
{
public:
	virtual void Func() //error
	{
		cout << "virtual C::Func()" << endl;
	}
};

Aquí Insertar imagen Descripción

Publicado 52 artículos originales · ganado elogios 26 · vistas 3410

Supongo que te gusta

Origin blog.csdn.net/weixin_43796685/article/details/103648559
Recomendado
Clasificación