El uso de C++ de la estructura a la clase

Tabla de contenido

Estructura (estructura)

clase

derechos de acceso a la clase

Definir objetos y miembros de datos

implementar la herencia

implementar polimorfismo

Implementar encapsulación


Estructura (estructura)


Una estructura es un tipo de datos definido por el usuario que puede contener múltiples variables miembro de diferentes tipos. La estructura se define de la siguiente manera:

struct StructName { 

    // 成员变量 

    type1 member1; 

    type2 member2; 

    // ... 

};

Las estructuras se pueden usar como variables ordinarias, por ejemplo:

StructName structObj; 

structObj.member1 = value1; 

structObj.member2 = value2;

clase


Una clase es un tipo de datos definido por el usuario que puede contener variables miembro, funciones miembro, constructores, destructores y más. La clase se define de la siguiente manera:


class ClassName { 

public: 

    // 成员函数 

    function1(); 

    function2(); 

    // ... 

private: 

    // 成员变量 

    type1 member1; 

    type2 member2; 

    // ... 

};

Las variables miembro y las funciones miembro de una clase pueden acceder a los miembros privados, pero el código fuera de la clase no puede acceder directamente a los miembros privados. La clase se utiliza de la siguiente manera:

ClassName classObj; 

classObj.function1(); 

classObj.function2();

derechos de acceso a la clase


Las variables miembro de clase y las funciones miembro pueden tener diferentes derechos de acceso, incluidos los públicos, privados y protegidos. Se puede acceder a los miembros públicos fuera de la clase, solo se puede acceder a los miembros privados dentro de la clase y se puede acceder a los miembros protegidos dentro de la clase y en las clases derivadas.

Aquí hay un ejemplo de código simple usando la clase:

#include <iostream> 

using namespace std; 

 

class Shape { 

public: 

    virtual void draw() { 

        cout << "This is a shape." << endl; 

    } 

}; 

 

class Circle : public Shape { 

public: 

    void draw() { 

        cout << "This is a circle." << endl; 

    } 

}; 

 

class Rectangle : public Shape { 

public: 

    void draw() { 

        cout << "This is a rectangle." << endl; 

    } 

}; 

 

int main() { 

    Shape* shapePtr; 

    Circle circleObj; 

    Rectangle rectangleObj; 

     

    shapePtr = &circleObj; 

    shapePtr->draw(); 

     

    shapePtr = &rectangleObj; 

    shapePtr->draw(); 

     

    return 0; 

}

Este ejemplo de código define una clase base Shape y dos clases derivadas Circle y Rectangle.

La clase Shape tiene una función de miembro público dibujar, que genera una forma predeterminada.

Tanto la clase Circle como la clase Rectangle heredan la clase Shape y reescriben la función de dibujo para generar sus respectivas formas.

En la función principal, usamos un puntero de tipo Forma shapePtr para apuntar a diferentes objetos de clase derivados y llamar a sus funciones de dibujo. Dado que la función de dibujo es una función virtual, se llamará a la función de dibujo del objeto de clase derivado en lugar de a la función de dibujo del objeto de clase base.

C++ es un lenguaje de programación orientado a objetos, y la clase es uno de los conceptos más importantes. Aquí hay algunos escenarios de uso y código de muestra para clases en C++:

Definir objetos y miembros de datos


class Person { 

private: 

    string name; 

int age; 



public: 

    Person(string n, int a) { 

        name = n; 

        age = a; 

    } 

    string getName() { 

        return name; 

    } 

    int getAge() { 

        return age; 

    } 

};

El código anterior define una clase llamada Persona, que tiene dos miembros de datos privados, nombre y edad, y funciones públicas de constructor y acceso.

implementar la herencia


#include<iostream>



class Animal { 

public: 

    void eat() { 

        std::cout << "Animal is eating"; 

    } 

}; 

 

class Cat : public Animal { 

public: 

    void meow() { 

        std::cout << "Cat is meowing"; 

    } 

}; 

 

int main() { 

    Cat cat; 

    cat.eat(); // 继承了Animal的eat函数 

    cat.meow(); // Cat自己的meow函数 

    return 0; 

}

El código anterior define dos clases Animal y Cat, donde Cat hereda de Animal. En Gato, podemos agregar nuestra propia función maullar mientras heredamos la función comer de Animal.

implementar polimorfismo


class Shape { 

public: 

    virtual void draw() { 

        cout << "Drawing a shape" << endl; 

    } 

}; 

 

class Circle : public Shape { 

public: 

    void draw() { 

        cout << "Drawing a circle" << endl; 

    } 

}; 

 

class Rectangle : public Shape { 

public: 

    void draw() { 

        cout << "Drawing a rectangle" << endl; 

    } 

}; 

 

int main() { 

    vector<Shape*> shapes; 

    shapes.push_back(new Circle()); 

    shapes.push_back(new Rectangle()); 

    for (int i = 0; i < shapes.size(); i++) { 

        shapes[i]->draw(); // 调用各自的draw函数 

        delete shapes[i]; 

    } 

    return 0; 

}

El código anterior define tres clases Forma, Círculo y Rectángulo, donde Forma es una clase abstracta, y Círculo y Rectángulo heredan de Forma.

En Forma, definimos una función de dibujo virtual, y en Círculo y Rectángulo, implementamos nuestras propias funciones de dibujo, respectivamente.

En la función principal, usamos un vector para almacenar punteros de forma y apuntamos a objetos de círculo y rectángulo respectivamente. Al llamar a la función dibujar, dado que es una función virtual, C++ llamará automáticamente a la implementación respectiva.

Implementar encapsulación


class Person { 

private: 

    string name; 

    int age; 

public: 

    Person(string n, int a) { 

        name = n; 

        age = a; 

    } 

    string getName() { 

        return name; 

    } 

    int getAge() { 

        return age; 

    } 

    void setName(string n) { 

        name = n; 

    } 

    void setAge(int a) { 

        age = a; 

    } 

}; 

 

int main() { 

    Person p("Alice", 25); 

    cout << p.getName() << endl; // 输出Alice 

    p.setName("Bob"); // 修改名字 

    cout << p.getName() << endl; // 输出Bob 

    return 0; 

}

Guess you like

Origin blog.csdn.net/qq_50942093/article/details/131455526