Resumen de la etapa de aprendizaje de C ++ (1)

Algunos fuera de tema

        Aprender cosas nuevas aún debe resumirse a tiempo, de lo contrario, pronto serán olvidadas. Y en el proceso de resumen, resolveremos nuestro propio lenguaje y pensamiento, y también mejoraremos nuestras habilidades de expresión personal. Seguir haciendo cosas simples no es fácil, vamos chica ~

        Comencé a aprender C ++ en julio. En ese momento, participé en una competencia relacionada con el procesamiento de imágenes digitales y el aprendizaje automático. Se escribió mucho código excelente en C ++, pero no podía entenderlo y no había forma de mejorarlo. El resultado del juego fue terrible. Así que estoy decidido a aprender este lenguaje de programación mágico y eficiente ~ Por otro lado, también me estoy preparando para la búsqueda de trabajo. Después de todo, la programación orientada a objetos es una gran técnica de programación. Aprenda esto sistemáticamente. Pensando, en el futuro, también se puede usar conscientemente para resolver problemas prácticos en otros lenguajes de programación (como MATLAB, Python).

        He terminado de leer Larry Ullman, "C ++ Book for Everyone" de Andreas Signer, y parte de "C ++" de Guan Hao y An Zhiyong ya no es difícil de aprender: despacho de aduana rápido con pájaros viejos. Al mirar los títulos de estos dos libros, sabes que es una lectura introductoria diseñada para personas con cero fundamentos. ¡Pero comenzar es realmente importante! ! ! Al principio, no necesita preocuparse por algunos detalles, pero debe centrarse en comprender las ideas de programación. Por supuesto, la habilidad práctica básica sigue siendo necesaria, así que no seas perezoso, la habilidad de programación se practica ~  

        El siguiente es un resumen de las cosas recién aprendidas para referencia futura.

Texto

        

1 preparación

      En el proceso de programación, podemos encontrar muchos problemas. Cuando no podemos resolverlos, a menudo pensamos en recurrir a algunos motores de búsqueda o foros técnicos. Cómo hacer preguntas de manera efectiva también es un arte. Consulte "Cómo hacer preguntas de manera inteligente" (http://catb.org/~esr/faqs/smart-questions.html) escrito por Eric Steven Raymond para más detalles.

       Escribir un programa en C ++ generalmente requiere múltiples pasos: borrar el propósito y las necesidades de este programa-> programación-> compilar, enlace-> (depurar, depurar, depurar ...) -> compilar, vincular-> ejecutar . Elegir un IDE que se adapte a su propio entorno de desarrollo integrado puede mejorar en gran medida la eficiencia de la programación. Uso Dev-C ++.



2 Tipo de datos, sintaxis básica, estructura de control

         Los tipos de datos comunes son enteros, números reales, matrices, caracteres, cadenas, punteros, estructuras y uniones;


        C ++ tiene requisitos de gramática más estrictos para el programa. La falta de un punto y coma pequeño y la asimetría entre paréntesis informará errores, por lo que debe desarrollar buenos hábitos de programación e intentar evitar cometer algunos errores de bajo nivel;

        Asegúrese de declarar o definir antes de usar variables y funciones;

        El tipo y el alcance de las variables deben considerarse cuidadosamente, y el código debe optimizarse lo más posible bajo la premisa de completar funciones básicas;

        

       La estructura de control incluye condicional if (-else), operador ternario (? :), múltiples condiciones (switch), loop (while, for);


  

3 entradas, salidas y archivos

        La esencia de cada programa es procesar datos, y muchos datos requieren la entrada del usuario o la lectura de un archivo. Después del procesamiento, el resultado debe mostrarse, y debe enviarse a la interfaz interactiva o guardarse como un archivo.

        Asegúrese de verificar la legalidad de los datos de entrada; cuando necesite ingresar los datos varias veces, recuerde eliminar el residuo del búfer;

        Al leer y escribir archivos, asegúrese de verificar si el archivo está realmente abierto;



4 definir funciones personales

        Crear una función con parámetros de entrada Los valores pasados ​​a la función deben tener el tipo y orden correctos; al definir la función, todos los parámetros obligatorios deben colocarse antes que los parámetros opcionales;

        La función en línea no necesita definir un prototipo para ella, toda la función se define antes que la función principal;

        La sobrecarga de una función es definir una función con diferentes parámetros (que pueden ser de diferentes tipos de datos o con un número diferente de parámetros) con el mismo nombre, pero con el mismo propósito;

        Existen varios tipos de llamadas a funciones: transferencia por valor, transferencia por dirección y transferencia por referencia;


5 objetos y clases

     (Rutina 1

#include 
#include 
//基类 
class Pet{
public:
	Pet(std::string theName);
	~Pet();
	virtual void eat();
	virtual void sleep();
	virtual void play()=0;//虚方法 //=0抽象方法   如果一个类中有一个抽象方法,那么必须至少还有一个普通的虚方法 
	static int getCount(); //静态方法 
	//void setName(std::string theName);
protected://允许这个类和他的子类来访问以下属性和方法 
	std::string name;
	friend class PetRenamer;//友元关系声明 (应该在没有其他办法时才使用友元关系,友元关系太多往往表示设计方案有缺陷)
private:
    static int count; //静态属性 
};
Pet::Pet(std::string theName){
	name=theName;
	count++;
	std::cout<<"Creating a pet named '"<name;
	std::cout<<" to "<name=newName;
	
}

//子类1 
//继承时的保留字public、protected、private与类的声明中含义不同 
class Cat:public Pet{
public:
	Cat(std::string theName);
	void climb();
	void play();
};
//继承机制中的构造器 
Cat::Cat(std::string theName):Pet(theName){
}
void Cat::climb(){
	std::cout<sleep();
	cat->eat();
	cat->play();
	std::cout<<"\n";
	dog->sleep();
	dog->eat();
	dog->play();
	
	delete cat;
	delete dog;
	return 0;
}

       Elemental

       La programación de objetos es el núcleo de C ++. Podemos entender el objeto como un nuevo tipo de datos, la diferencia es que incluye no solo variables (atributos) sino también funciones (métodos).

       En la declaración de la clase, generalmente se debe agregar una de las tres palabras reservadas público, protegido, privado frente a los atributos y métodos para controlar su accesibilidad;

       Los métodos pueden llamarse entre sí;

       Los constructores y destructores son un tipo especial de método;

       este puntero

       Intermedio

       Mecanismo de herencia de clase : este mecanismo permite a los programadores crear una jerarquía de clase, y cada subclase heredará los métodos y propiedades definidos en su clase base. En otras palabras, el código confiable existente se puede extender a través del mecanismo de herencia, mejorando en gran medida la eficiencia del desarrollo.

       Preste atención a la sintaxis del constructor y destructor utilizado en el mecanismo de herencia;

        En algunos casos, el método de anulación necesita proporcionar una función general en la clase base, pero necesita cambiar la implementación de este método en su subclase;

       El método de sobrecarga  es el mismo que la función de sobrecarga;

       Amistad   Una clase completamente irrelevante necesita acceder a un miembro protegido o un miembro privado; el amigo de la clase es seleccionado por sí mismo, lo cual se indica en la declaración de la clase; no abuses de la relación de amistad

       Avanzado

       Las propiedades estáticas y los métodos estáticos     no pertenecen a un solo objeto, sino que pertenecen a las propiedades y métodos de toda la clase. Beneficios: Aún puede controlar sus derechos de acceso a través de palabras reservadas; puede acceder al miembro sin crear ningún objeto; hacer ciertos datos en Compartido entre todos los objetos de esta clase; no puede acceder a propiedades no estáticas en métodos estáticos; no olvide asignar memoria para propiedades estáticas (es decir, hacer declaraciones de propiedades estáticas fuera de la declaración de clase);

       Un método virtual    sobrecarga un método en una subclase, pero cuando el nuevo método genera un objeto de subclase, se utiliza un puntero a la clase base. Cuando se llama nuevamente al método, todavía se llama a un método en la clase base. Comprenda que declarar todos los métodos como métodos virtuales en la clase base ralentizará el código ejecutable final, pero puede garantizar que el programa se comporte como se esperaba. Al implementar una relación de herencia de clase de niveles múltiples, la clase base más alta solo debe tener métodos virtuales.

       Los métodos abstractos le  dicen al compilador que este método es indispensable, pero no puedo proporcionarle una implementación ahora (en esta clase base); para usar métodos abstractos, debe implementarlo en la clase base; hay un detalle más a tener en cuenta: si Para usar métodos abstractos en una clase, debe tener al menos un método virtual ordinario;

         Funciones polimórficas que pueden manejar muchos tipos de datos diferentes

       El  propósito del operador sobrecargado es hacer que el código sea más fácil de leer y comprender, tratar de no perder su significado original, declarado antes de la función principal, implementado después de la función principal;

       Más de    una subclase hereda dos o más clases base;  

       La herencia virtual    le dice al compilador que las subclases derivadas de la clase actual solo pueden tener una instancia de esa clase base


6 gestión de memoria dinámica

        La memoria dinámica permite a los programadores crear y usar varias estructuras de datos que pueden expandirse o contraerse según las necesidades específicas; otro uso es para que las funciones devuelvan un puntero a un bloque de memoria (función de fábrica);

        La memoria dinámica consta de bloques de memoria con solo direcciones y sin nombres, por lo que debe utilizar punteros para acceder a ellos. Aunque los bloques de memoria asignados dinámicamente no tienen alcance, las variables de puntero utilizadas para almacenar sus direcciones tienen alcance.

        Aplicación y liberación de memoria dinámica; la instrucción delete solo libera el bloque de memoria señalado por el puntero, pero el puntero sigue ahí;

        No olvide declarar métodos como métodos virtuales al crear y usar objetos dinámicamente;

        Copiar constructor y operador de asignación Ocasiones de aplicación-> Se copian dos objetos, pero contienen miembros de tipo puntero. Copiar bit a bit causará un peligro oculto de puntero. Siempre que declare una clase que tenga un atributo de puntero y libere esa memoria en el destructor, debe implementar un constructor de copia y un operador de asignación; debe asegurarse de que el constructor de copia copie todos los atributos. La coerción de objetos estáticos / coerción de objetos dinámicos es mejor usar siempre el operador dynamic_cast cuando se trata de objetos, recuerde verificar si el resultado es NULL antes de continuar  


7 espacios de nombres y modularidad

        Los archivos de encabezado se dividen en archivos de encabezado del sistema y archivos de encabezado personalizados para guardar declaraciones de funciones, tipos de datos definidos por el usuario (estructuras y clases), plantillas y constantes globales; solo incluya el código más necesario; intente evitar usarlos al importar Ruta absoluta, porque esto reducirá la portabilidad del código;

        Archivos de implementación Para los usuarios, vea los archivos de encabezado para comprender el uso básico de las funciones, etc. Para el compilador, debe borrarse hasta cómo se implementa cada función o clase; el nombre del archivo de implementación debe ser coherente con el archivo de encabezado;

        El preprocesador C es una herramienta creada por personas para desarrollar aplicaciones C y acelerar su ejecución.

        El espacio de nombres lo define el propio usuario. Las cosas en el mismo espacio de nombres pueden ser únicas en este espacio de nombres; puede usar la palabra clave del espacio de nombres para agregar cosas nuevas a un espacio de nombres en el mismo u otro archivo; use Uso de espacio de nombres (no escriba nada, no solo escriba el nombre del espacio de nombres, aunque esto no es imposible), la ubicación de la directiva o declaración de uso determina en qué ámbito se pueden usar las cosas extraídas del espacio de nombres;

        Los tres conceptos de enlace, alcance y clase de almacenamiento están interrelacionados, pero el ángulo de observación y descripción del problema es diferente ~ Cuando se compilan varios archivos al mismo tiempo, cada archivo se denomina unidad de traducción, y en cada unidad de traducción Si las cosas definidas se usan en otra unidad de traducción es donde entra en juego el enlace; se divide en enlaces externos (se puede acceder a cada unidad de traducción siempre que exista la variable), enlaces internos (en una unidad de traducción Las cosas definidas solo pueden usarse en la unidad de traducción) y sin conexión (las variables definidas en la función solo existen dentro de la función). Cada variable tiene una clase de almacenamiento, que determina dónde y cómo el programa almacenará el valor de la variable en la computadora, y qué alcance debe tener la variable.


8 plantillas

         Paradigma de programación C ++: paradigma de procedimiento (dividir el programa en diferentes funciones), paradigma orientado a objetos (organizar código y datos en varias clases y establecer relaciones de herencia entre clases), programación genérica (Apoye a los programadores para crear plantillas de funciones y clases, en lugar de funciones y clases específicas, puede resolver múltiples problemas con una solución ~)

         Escriba y use su propia plantilla de función de código genérico (no divida la plantilla de función en prototipo e implementación); plantilla de clase (igual que la anterior); use notación en línea para evitar que el compilador encuentre la implementación y haga que el programa sea legible Superior

         Biblioteca de plantillas estándar STL

         Los contenedores y los contenedores de algoritmos son estructuras numéricas que pueden contener dos o más valores. Diferentes problemas son adecuados para diferentes contenedores. Puede escribir el suyo propio o puede llamar a la Biblioteca de plantillas estándar (STL) de C ++. Hay muchos diseñados y probados cuidadosamente Contenedores listos para usar; encontrar el contenedor más adecuado es solo una parte del trabajo de programación, y se necesitan algunas funciones (algoritmos) para procesar los datos en ese contenedor. STL también proporciona muchos algoritmos bien concebidos y probados rigurosamente para resolver varios problemas comunes Problema Los detalles de los algoritmos utilizados comúnmente en STL se pueden encontrar en línea.




          Lo anterior es la mayor parte del contenido del primer libro de referencia. Después de dominar estos conceptos básicos, puede escribir aplicaciones C ++ simples. Pero muchos detalles no se notan antes de hacerlo usted mismo, aún tiene que hacer más ~

       

Liberadas nueve artículos originales · ganado elogios 1 · vistas 6066

Supongo que te gusta

Origin blog.csdn.net/wcysghww/article/details/77966136
Recomendado
Clasificación