C ++ clases y objetos (seis) --- Detalles

detalles

1. Constructores aspectos

Inicialización lista
en el constructor al principio con dos puntos seguida de una lista separada por comas de miembros de datos, una variable miembro después de cada paréntesis, corchetes interna uso copia similares configurado para inicializar variables miembro.

class Date
{
public:
	Date(int year = 2019, int month = 10, int day = 19)//构造函数
		:_year(year)//初始化列表
		,_month(month)
		, _day(day)
	{
	}
	Date(Date& d)//拷贝构造函数
		:_year(d._year)//初始化列表
		,_month(d._month)
		,_day(d._day)
	{
	}
private:
	int _year;
	int _month;
	int _day;
};
nota:
  1. Cada lista de inicialización variable miembro sólo puede iniciarse una vez .
  2. Clase contiene sobre los miembros deben inicializar en la lista de inicialización.
    variables miembro const modificados
    variables miembro de tipo de referencia de
    un tipo de clase (tipo personalizado) variable miembro (clase personalizada y ningún constructor predeterminado)
    Ejemplo 1
class B
{
public:
private:
	int& _ref;
	const int _b;
};
int main()
{
	B b;
	return 0;
}

Aquí Insertar imagen Descripción
Cuando el objeto directo se crea una instancia b, se informó de un error?
Cuando variables miembro const cuando B y tipos existen o dependen directamente de un error.
Ejemplo 2

class A
{
public:
	A(int a)
		:_a(a)
	{}
private:
	int _a;
};

class B
{
public:
private:
	A _ca;
};

int main()
{
	B b;
	return 0;
}

También apareció en el error:
Aquí Insertar imagen Descripción
Cuando la clase de objeto B Ejemplo B, ya que existe el objeto B en la clase A, de modo que cuando se crea una instancia del objeto, si no constructor apropiado para el objeto B en _a llamada puede también ocurrir este tipo de error.
Solución
usar una lista inicializado a estos no se pueden resolver correctamente una instancia tres tipos que se producen cuando se crea una instancia de un objeto.
const: las variables no modificables, por lo que cuando se crea debe ser inicializado;
y Tipo: Cuando se crea un tipo de referencia se debe hacer referencia a una variable, de lo contrario no hay manera de ser creado.
Tipo de medida: Si no hay tipos personalizados Callable llamada al constructor apropiada de un objeto de tipo personalizado no se pueden crear instancias.

class A
{
public:
	A(int a)
		:_a(a)
	{}
private:
	int _a;
};

class B
{
public:
	B(A ca, int ref, int b)//使用初始化列表
		:_ca(ca)
		,_ref(ref)
		,_b(b)
	{}
private:
	A _ca;
	int& _ref;
	const int _b;
};

int main()
{
	B b(1, 2, 3);//传递列表中的参数
	return 0;
}

Primera clase personalizada _CA ser construido, en la lista de inicialización de llamada const, int & inicialización juntos.

prestar atención
  1. Trate de usar la lista de inicialización para inicializar , debido a que las variables miembro para personalizar el tipo, uso lista de inicialización para inicializar.
  2. En la variable miembro se inicializa en la lista de inicialización en el orden de las clases en el orden de declaración , independientemente de su orden en la lista de inicialización.
class B
{
public:
	B(int a, int b)
		: _b(b)//先初始化成员变量_a
		, _a(a)//与所放置位置无关
	{
	}
private:
	int _a;
	int _b;
};
objetos no identificados de construcción

Cuando una instancia de un objeto que sólo un parámetro se puede asignar directamente por el símbolo =.

class B
{
public:
	B(int a) :_a(a)
	{
	}
private:
	int _a;
};

int main()
{
	B b1(1);
	b1 = 20;
	return 0;
}

Aquí Insertar imagen Descripción
En b1 (1); tiempo, _A b1 variables de primera miembro a 1;
aunque b1 = 20; directa tipo B 20 está configurado para un objetos sin nombre , para llevar a cabo la asignación de b1.
Aquí Insertar imagen Descripción

2. Miembro estático

variables miembro estáticas
  1. variables miembro estáticas en la inicialización, la inicialización no se pueden colocar en posición en la lista. Fuera de la clase debe ser inicializado .
    Aquí Insertar imagen Descripción
  2. variables miembro estáticas pueden ser considerados como una variable miembro fuera de la clase, todos los objetos comparten las variables miembro estáticas .
class B
{
public:
	B()
	{
	}
private:
	static int _s;
};

int B::_s = 10;// 在类外进行初始化静态成员变量

int main()
{
	B b;
	return 0;
}
función miembro estático
  1. función miembro estático declaró en clase, fuera de la clase se puede conseguir, también se puede lograr en la clase.
class B
{
public:
	static void Func1();
	static void Func2()
	{
		cout<<"static Func2"<<endl;
	}
private:
	int _a;
};

void B::Fun1c1()//在类外实现也和静态成员变量相同,
{			  //必须的加上作用域限定符B
	cout << "static Func1" << endl;
}

int main()
{
	B b;
	b.Func1();
	b.Func2();
}
  1. la función miembro no contiene este puntero
class B
{
public:
	static void Func()
	{
		_a = 10;//在类内静态成员函数调用this指针中的变量_a
	}
private:
	int _a;
};

int main()
{
	B b;
	b.Func();
}

Aquí Insertar imagen Descripción

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

Supongo que te gusta

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