O melhor tutorial herança C ++ em 2024. Neste tutorial você pode aprender & Classe base da classe derivada,controle de acesso e herança,Tipo de herança,Herança múltipla,
Programação orientada a objetos é o conceito mais importante é herdada. Herança nos permite definir uma classe para outra base de classe, o que torna a criação e manutenção de uma aplicação mais fácil. Para fazer isso, também atingiu a reutilização da funcionalidade de código e melhorar os resultados do tempo de execução.
Quando você cria uma classe, você não precisa re-escrever um novo membros de dados e funções de membro, basta especificar a nova classe herda um membro existente da classe pode ser. A classe existente é chamadade classe base, a nova classe é chamada de classe derivada.
A herança é umrepresentante do relacionamento. Por exemplo, o mamífero é um animal, um cão é um mamífero, por conseguinte, um cão é um animal, e assim por diante.
Uma classe podem ser derivados de mais do que uma classe, o que significa que ele pode herdar dados e funções de várias classes de base. Define uma classe derivada, usamos uma lista de classe derivada para especificar uma classe de base. lista de derivação de classe para classe um ou mais base chamada a seguinte forma:
class derived-class: access-specifier base-class
Em que o acesso modificador de acesso especificador épúblico, protegido ou um privado,da classe base é definida antes do nome de uma classe. Se não tiver acesso modificador de acesso especificador, o padrão é privado.
Suponha que você tenha umaformade classebase,retângulo suas classes derivadas, como segue:
#include <iostream> using namespace std; // 基类 class Shape { public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } protected: int width; int height; }; // 派生类 class Rectangle: public Shape { public: int getArea() { return (width * height); } }; int main(void) { Rectangle Rect; Rect.setWidth(5); Rect.setHeight(7); // 输出对象的面积 cout << "Total area: " << Rect.getArea() << endl; return 0; }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
Total area: 35
classe derivada pode acessar a classe base para todos os membros não-privados. Então, se você quer ser um membro de uma série de funções de membro de classe de base do acesso classe derivada deve ser declarado na classe base é privado.
Podemos resumir os diferentes direitos de acesso de acordo com o tipo de acesso, como segue:
访问 | public | protected | private |
---|---|---|---|
同一个类 | yes | yes | yes |
派生类 | yes | yes | no |
外部的类 | yes | no | no |
A classe derivada herda todo o método da classe base, excepto nas seguintes circunstâncias:
Quando uma classe é derivada da classe base, a classe base pode ser herdada comopúblico, protegido ou tipos particulares.Através da explicação acima é herdada tipo de acesso modificador de acesso especificador para especificar.
Nós quase não usoprotegida ou herança privateé normalmente usado herançapúblico.Quando diferentes tipos de herança, siga as seguintes regras:
herança múltipla ou seja, uma subclasse pode ter mais de uma classe pai que herda as características de mais de uma classe pai.
classe C ++ pode herdar de mais de um membro da classe a seguinte sintaxe:
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… { <派生类类体> };
Em que a herança de acesso modificador épúblico, protegido ou um privado,utilizado para decorar cada classe base, a classe base entre cada separados por uma vírgula, como mostrado acima. Agora vamos olhar para os exemplos a seguir:
#include <iostream> using namespace std; // 基类 Shape class Shape { public: void setWidth(int w) { width = w; } void setHeight(int h) { height = h; } protected: int width; int height; }; // 基类 PaintCost class PaintCost { public: int getCost(int area) { return area * 70; } }; // 派生类 class Rectangle: public Shape, public PaintCost { public: int getArea() { return (width * height); } }; int main(void) { Rectangle Rect; int area; Rect.setWidth(5); Rect.setHeight(7); area = Rect.getArea(); // 输出对象的面积 cout << "Total area: " << Rect.getArea() << endl; // 输出总花费 cout << "Total paint cost: $" << Rect.getCost(area) << endl; return 0; }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
Total area: 35 Total paint cost: $2450