Resumen del estudio de una semana de C ++ (28/02/2021)

1. Clase C ++

  • La composición de la clase

    Consiste en métodos y datos. El método puede ser público o privado, y los datos son generalmente privados.
Class Human{
    
    
public:
	void eat();
	void drink();
	void play();
	void sleep();
private:
	void seeSister();
	string name;
	int age;
}

2. Constructor

  • Clasificación de constructores

    Constructor predeterminado Constructor
    personalizado Constructor de
    copias Constructor de
    asignaciones

① Constructor predeterminado
Al crear un objeto, el compilador genera automáticamente un constructor predeterminado, que es el constructor sintético predeterminado.

clase:

Class Human{
    
    
public:
	Human(); //默认构造函数
private:
	string name;
	int age;
}
Human h; //创建对象,编译器调用Human()合成的默认构造函数

Cuando los datos de la variable se inicializan en el constructor, es el constructor predeterminado definido manualmente.

clase:

Class Human{
    
    
public:
	Human(); //默认构造函数
private:
	string name;
	int age;
}

lograr:

Human::Human(){
    
    
	name = "张三";
	age = 18;
}

transferir:

Human h; //创建对象,编译器调用Human()手动定义的默认构造函数

② Constructor personalizado
Agregue parámetros al constructor e inicialice los datos.

clase:

Class Human{
    
    
public:
	Human(string name,int age); //自定义构造函数
private:
	string name;
	int age;
}

lograr:

Human::Human(string name,int age){
    
    
	this->name = name;
	this->age = age;
}

transferir:

Human h("李四",22); //创建对象,编译器调用自定义的构造函数

③ Constructor de copia
Cuando se crea un objeto, se inicializa y se asigna otro objeto al objeto creado actualmente, se llama al constructor de copia.

clase:

Class Human{
    
    
public:
	Human(const Human&); //拷贝构造函数Human(const Human& other) other可以省略
private:
	string name;
	int age;
}

lograr:

Human::Human(const Human& other){
    
    
	name = other.name;
	age = other.age;
}

transferir:

Human h1("王五",21); //创建对象,编译器调用自定义的构造函数
Human h2(h1); //调用拷贝构造函数
Human h3 = h1; //调用拷贝构造函数

La función de copia anterior es un constructor de copia definido manualmente.Cuando se omite el constructor de copia, el compilador generará y llamará automáticamente al constructor de copia, que es un constructor de copia sintético.

El escenario de uso del constructor de copias:
cuando el parámetro real de la función es un objeto, el tipo de retorno es una clase.
Objeto de matriz, inicializado.

Human test(Human human){
    
    
	return human;
}

Human test1(Human& human){
    
    
	return human;
}

Human h1,h2,h3;
test(h1); //调用两次拷贝函数
test1(h1); //调用一次拷贝函数

Human men[] = {
    
    h1,h2,h3}; //调用三次拷贝函数

④ Constructor de asignación
Cuando se crea un objeto, cuando se asigna otro objeto al objeto creado actualmente, se llama al constructor de asignación de copia.

clase:

Class Human{
    
    
public:
	Human& operator=(const Human&); //赋值构造函数
private:
	string name;
	int age;
}

lograr:

Human& Human::operator=(const Human& other){
    
    
	name = other.name;
	age = other.age;
}

transferir:

Human test(Human& human){
    
    
	return human;
}

Human h1("王五",21); //创建对象,编译器调用自定义的构造函数
Human h2(h1); //调用拷贝构造函数
h2 = h1; //调用赋值构造函数
Human h3;
h3 = test(h1); //调用赋值构造函数

3. Destructor

Generalmente se usa para liberar recursos (por ejemplo, cuando se solicita memoria dinámica y necesita ser liberada) Cuando no hay recursos para liberar y no se escribe ningún destructor, el compilador lo llamará automáticamente cuando el objeto sea destruido.

clase:

Class Human{
    
    
public:
	~Human(); //析构函数
}

4. Miembros de datos estáticos y funciones de miembros estáticos

-Miembros de datos estáticos

definición:

Class Human{
    
    
public:
	void play();
private:
	static string name;	//静态数据成员
}

inicialización:

string Human::name = "张三";	//初始化静态数据成员
void play(){
    
    
	return name;	//类的方法中可以直接读写静态数据成员
}

-Función de miembro estático

Se puede acceder a las funciones miembro estáticas directamente usando el nombre de la clase, o se puede acceder a ellas después de que se crea el objeto.
Las funciones de miembros estáticos no pueden acceder a miembros de datos ordinarios (miembros de instancia) y métodos de miembros ordinarios (métodos de instancia).

definición:

Class Human{
    
    
public:
	void play();
	static void drink();
private:
	static string name;	//静态数据成员
	int age;
}

lograr:

Human::drink(){
    
    
	return name;	//只能访问静态数据成员和静态成员方法
}

transferir:

Human::drink();	//可以直接用类型调用
Human h1;
h1.drink();	//对象也可以调用

5. miembros de datos const y funciones de miembro const

miembro de datos const

Los miembros de datos de tipo const no se pueden modificar y solo se pueden leer.

definición:

Class Human{
    
    
public:
	void play();
private:
	static string name;	//静态数据成员
	int age;
	const string boolType;	//const数据成员
//	const string  boolType = "A";	//类内初始化
}

Inicialización: puede usar el valor de la clase, también puede usar la lista de inicialización del constructor

Human::Hunman():boolType("未知"){
    
    
	return name;
}

función miembro constante

En esta función, no se pueden modificar miembros de datos, solo leer. Tampoco puede llamar a otras funciones miembro que no sean constantes

definición:

Class Human{
    
    
public:
	void play() const;
	void setName();
private:
	static string name;	//静态数据成员
	int age;
}

Inicialización: puede usar el valor de la clase, también puede usar la lista de inicialización del constructor

void Human::play() const{
    
    
	return name;	//只能读,不能修改
	setName();	//不能调用其他的非const的方法
}

5. Combinación y agregación

combinación

[Ejemplo] Una categoría de computadora se compone de chips de CPU, discos duros, memoria, etc.
Entre ellos, el chip de CPU también está representado por una clase, y la clase de CPU y la clase de computadora están en una relación combinada. Cuando se crea un objeto de computadora, también se creará el objeto de CPU, y cuando se destruye el objeto de computadora, también se destruirá el objeto de CPU.

Categoría de CPU:

Class CPU{
    
    
public:
	CPU(const string *name,const int version);
private:
	string name;
	int version;
}

Categoría de computadora:

#include "CPU.h"	//包含CPU类

Class Computer{
    
    
public:
	Computer(const string *name,const int version,
		int hardDisk,int memory);
private:
	CPU cpu;
	int hardDisk;
	int memory;
}

inicialización:

Computer::Computer(const string *name,const int version,
		int hardDisk,int memory):cpu(name,version){
    
    
	this->hardDisk = hardDisk;
	this->memort = memory;
}

polimerización

[Ejemplo] Una computadora necesita una tarjeta de sonido externa, cree una clase de tarjeta de sonido.
La clase de tarjeta de sonido y la clase de computadora están en una relación agregada. Cuando se crea un objeto de computadora, también se creará el objeto de la tarjeta de sonido, y cuando se destruye el objeto de la computadora, el objeto de la tarjeta de sonido no se destruirá.

Categoría de computadora:

class Voice;	//直接定义Voice类

Class Computer{
    
    
public:
	void addVoice(Voice *voice);	//添加声卡
private:
	CPU cpu;
	int hardDisk;
	int memory;
}

inicialización:

void Computer::addVoice(Voice *voice){
    
    
	this->voice = voice;
}

transferir:

#include "Computer.h"	//包含计算机类
#include "Voice.h"	//包含声卡类

Computer cmp;
cmp.addVoice();	//调用添加声卡的方法

Supongo que te gusta

Origin blog.csdn.net/jjswift/article/details/114229942
Recomendado
Clasificación