Red de conocimiento informático - Material del sitio web - Cómo hacer un pequeño programa simple con VC (ver pregunta para más detalles)

Cómo hacer un pequeño programa simple con VC (ver pregunta para más detalles)

¡Hola!

Es un poco excesivo, pero siempre es bueno para ti. Cuanto más mires, más beneficios obtendrás. Mmm. Qué interesante

En comparación con el lenguaje C, el lenguaje C ha introducido dos cosas nuevas, una está orientada a objetos (específicamente, clases)

) y la otra es la tecnología de plantillas (programación de plantillas). o la programación genérica es una tecnología muy popular, aunque todavía está en C #

La programación genérica no es compatible, pero creo que esta característica se agregará en el futuro), las plantillas son más populares en C Complex

Parte variada, pero como verdadero programador de C, esta parte es muy importante. Especialmente para la biblioteca estándar c.

El dominio es particularmente importante.

Cuando empieces por primera vez, no te abalanzas sobre los distintos magos y diseñadores de VC. Debido a que depende de una gran cantidad de código generado por el entorno de desarrollo, nos confundirá y no favorecerá el aprendizaje del lenguaje C en sí. Mi sugerencia es generar un trabajador de consola vacío.

Procese y luego agregue archivos usted mismo.

El siguiente es un programa de consola simple:

//robindy/list.cpp

#iincludes

#iincludes

Usar espacio de nombres std

int main()

{

Lista coll

for(char c = ' a ' ; c lt= 'z c)

{

coll . push _ back(c);

}

lista::const_iterator. pos;

for(pos = coll . comenzar(); pos! = coll . end(); posición)

{

cout lt lt*pos lt. lt' ';

}

cout lt ltendl

Devuelve 0;

}

Para usar Espacio de nombres Explicación estándar:

El espacio de nombres se refiere a varios rangos de identificadores visibles. Todos los identificadores de la biblioteca estándar de C se definen en un espacio de nombres llamado std.

Debido al concepto de espacios de nombres, cuando se utiliza cualquier identificador de la biblioteca estándar de C, existen tres opciones:

1. Especificar el identificador directamente. Por ejemplo, std::ostream en lugar de ostream. La declaración completa es la siguiente:

STD::cout lt; ltSTD::hex lt; lt3.4 lt ltSTD::endl

2.

Usar STD::cout;

Usar STD::endl;

El programa anterior se puede escribir como

cout lt ltSTD :: hex lt; lt3.4 lt ltendl

3. La forma más conveniente es utilizar el espacio de nombres std. De esta manera, todos los identificadores definidos en el espacio de nombres std son válidos (públicos). Al igual que se declaran como variables globales. Entonces la declaración anterior se puede escribir así:

cout lt lt hexadecimal lt lt lt3.4 lt ltendl

Este programa utiliza la biblioteca de plantillas estándar para imprimir los caracteres a~z en la pantalla, de las cuales solo se utilizan dos funciones principales

Solo los siguientes dos métodos de escritura aceptados por el comité de estándares c cumplen con el estándar c y son portátiles.

Es decir:

int main()

{

}

y

int main(int argc , char* argv[])

{

}

C define un retorno implícito de 0 al final de main() pero la declaración de retorno debe; Sea explícito con VC Escrito con estilo.

En BCB, puedes compilar sin escribir retorno.

Este programa utiliza STL: contenedores en listas enlazadas. Primero, inserte 26 letras en la lista vinculada, luego recorra la lista vinculada e ingréselas.

Imprimir caracteres.

No recomiendo que los principiantes comiencen con la biblioteca de plantillas desde el principio, pero les sugiero que aprendan la biblioteca de plantillas paso a paso y de forma consciente. Por ejemplo,

Familiarícese con el uso de cout y cin (ubicados en iostream) y reduzca el uso de printf y sc en la antigua biblioteca de funciones de C.

Anf et al.

La ventaja de empezar desde la consola es que nos evita tener que entender otros códigos generados por herramientas como los asistentes en VC, así como todo el proceso del programa.

Muy claro. Una de las dificultades para los principiantes en el aprendizaje de VC es que no pueden descifrar el flujo de todo el programa (comience desde esa declaración y luego

salga de la declaración. MFC ha encapsulado demasiado para ocultar la verdad A través de la consola, podemos aprender rápidamente muchas características nuevas del lenguaje C, como la encapsulación de clases, la herencia y el polimorfismo. A lo largo de este período de estudio, deberíamos poder dominar tres cosas: vocabulario de la clave C, gramática (centrándonos en el objeto). -orientado y plantillas) y c

biblioteca estándar (solo sepa cómo usarla, se necesita mucho tiempo y energía para dominarla a fondo

). Dongdong (Una gran parte de MFC está relacionada con interfaces, ¡así que creo que MFC es inflado y aburrido! Mirando hacia atrás en el pasado.

Los programas escritos en MFC tienen una sensación de "basura").

Haga una prueba usted mismo:

Escriba un programa de consola que incorpore herencia de clases, sobrecarga de funciones y polimorfismo dinámico (implementación de funciones virtuales).

Encapsulación de datos y estándares de biblioteca C. application.

Felicitaciones, ha pasado el lenguaje C.

Hay todo tipo de fenómenos gramaticales extraños en C. Si no tiene tres o cinco años de tecnología, no digas que sabes C

^_^

Libro recomendado "Pensando en C" (si tienes energía, puedes leer el texto original directamente). /p>

"C básico"

Originalmente planeé continuar hablando sobre cómo ingresar al mundo c, pero después de pensarlo, sentí que todavía necesitaba resolver un problema primero <. /p>

: ¿Por qué aprender C? Creo que en la industria del desarrollo de software, además de ganarse la vida, aprender cosas nuevas debe basarse en el interés. Así que deje de lado mi preferencia personal por C. Me gustaría escribir una carta. para que aprendas C.

Mi primer consejo para ti al aprender C es: ¡no te rindas a mitad de camino!

Más tarde fue una necesidad de la vida y finalmente sentí placer. de eso, y eso fue suficiente.

Antes de que aparezca algo nuevo, es muy importante resolver el problema de la motivación. Es lo mismo que matar gente, si simplemente surge de repente, entonces no habrá. sensación de logro después de intentarlo. Los mártires revolucionarios nos han dado un buen ejemplo, incluso si aprendemos C

Encontramos demasiada confusión y dolor en el camino, pero después de todo trabajamos duro por nuestras creencias. , sabíamos lo que estábamos haciendo y lo que perseguíamos.

¿Para qué tipo de desarrollo es adecuado?

C es un lenguaje a gran escala ampliamente utilizado en el desarrollo de software industrial. alta complejidad y capacidad de resolución de problemas.

C

Tiene un gran valor no sólo en el desarrollo, sino también en el mundo académico. Un artículo sobre c debería estar bien.

Describámoslo como un vasto mar de humo. Hay innumerables libros clásicos de talla mundial sobre C. Sin embargo, el lenguaje de desarrollo actual es así

Este lugar es tan próspero que incluso Microsoft está lanzando un nuevo lenguaje de desarrollo C#. Una realidad innegable es la de la programación de bajo nivel.

En el campo de la informática, C está exprimiendo a C y también está experimentando un fuerte rebote de C. Hace algún tiempo, se dijo que era la fuente del sistema operativo de Microsoft.

Gran parte del código está en lenguaje C. En el mundo de la programación avanzada, Java y C# están canibalizando los sitios web C

. Quizás la locura por Java y C# finalmente obligue a C a regresar al estándar, a las áreas de desarrollo donde tiene ventajas fundamentales:

Programación de sistemas de bajo nivel, aplicaciones de alto nivel, gran escala y alto rendimiento. diseño, programación embebida, programación y datos generales

Cálculo científico de valor, etc. Si es así, creo que es algo bueno. El alto rendimiento requerido por el software del sistema de energía y los cálculos numéricos a gran escala son exactamente para lo que c es bueno. Personalmente, Nari y Luneng participan en los cálculos del sistema de energía.

Nuestro software, como PAS, está desarrollado en C. En el desarrollo de software de sistemas de energía, c es de gran utilidad.

Tierra. C ha atraído tanta inversión intelectual que existen innumerables bibliotecas y libros para trabajos destacados en este campo, incluidos productos de software pesados.

Hay una página en la página personal de Bijani Strausstrup, el padre de C.

Enumera algunos sistemas, aplicaciones y bibliotecas que están (todos o en su mayoría) escritos en C.

Los siguientes son algunos ejemplos (tomado del sitio web de Honor):

O Sistema Adobe: todas las aplicaciones principales están desarrolladas en C, como Photoshop preparado para imágenes

<; p >, ilustradores y acróbatas, etc.

Maya: ¿Sabes qué software se utilizó para crear las acrobacias informáticas en Spider-Man y El Señor de los Anillos? Así es, es Maya.

O Amazon.com: utilice C para desarrollar software de comercio electrónico a gran escala.

oApple: Algunas "partes" importantes están escritas en C.

o AT ampt: El mayor proveedor de tecnología de telecomunicaciones de Estados Unidos, sus principales productos se desarrollan en C.

O Google: El buscador web está escrito en C.

o IBM: OS/400.

o Microsoft: Los siguientes productos están escritos principalmente en C (Visual C):

o Windows XP Windows NT: NT4, 2000 Windows 9x: 95, 98, Me Microsoft Office: Wo

Rd, Excel, Access, PowerPoint, Outlook Internet Explorer, incluido Outlook Express.

Estudio Visual: Visual C, Visual Basic, Visual FoxPro. NET framework utiliza la biblioteca de clases c.

#, pero el compilador de C# en sí está escrito en C. Proyecto Exchange SQL Server FrontPage

Todos los juegos...

o KDE: K Desktop Environment (Linux).

Sistema operativo Symbian: El más popular Uno de los sistemas operativos móviles.

c se originó en el lenguaje C. Todavía recuerdo el momento en que aprendí el lenguaje C hace mucho tiempo (fue un momento feliz y satisfactorio), pero

aprender c ahora no lo es. Solo si piensas en agregar una clase a C, no podrás jugar bien en C.

.

Entonces, c no es de ninguna manera una actualización o extensión de C. Deberíamos aprender c como un nuevo lenguaje.

Padre Bjarne Straustrup).

Al escribir un programa, primero esperamos que el programa se pueda ejecutar correctamente, en segundo lugar, que se pueda aceptar la eficiencia y, en tercer lugar, que sea fácil de mantener. c es

un lenguaje difícil de aprender y fácil de usar. c ofrece demasiadas opciones. Hay cuatro modos de pensar al escribir programas en c: basado en procesos, basado en objetos, orientado a objetos y universal. Cuando usamos un lenguaje para escribir programas,

no significa usar el lenguaje en sí. En otras palabras, usamos más bibliotecas para escribir programas. Por ejemplo

MFC, STL, ATL, VCL, etc. Entre ellos, c debería usarse para escribir código con una estructura hermosa, excelente rendimiento, código conciso y fácil de usar.

Mantener código, la primera biblioteca estándar de c. STL tiene estrictos requisitos de eficiencia, por lo que se utilizan programas escritos en STL.

El orden es simple y hermoso (hace algún tiempo publiqué una publicación pidiendo específicamente ordenar una cantidad de números enteros. El propósito real era

mostrar la simplicidad y elegancia de STL) . Una vez que nos acostumbramos a pensar en los problemas con el pensamiento general, ¡podremos apreciar plenamente la belleza que aportan las plantillas!

Para cálculos numéricos, la biblioteca estándar c puede satisfacer plenamente los requisitos de datos e información de los servicios modernos y la informática comercial.

Al responder a una solicitud.

Creo que lo más importante para aprender bien un idioma es la práctica. En otras palabras, ¡escribe más! La "acumulación de experiencia en ingeniería" es de gran importancia para la situación actual

¡Es muy importante para los programadores que han estado desarrollando durante un período de tiempo! Sólo mediante la acumulación continua podremos darnos cuenta gradualmente de lo que hay detrás del lenguaje C. Para ello, los principiantes sin mucha experiencia en la escritura de código de programa también pueden utilizar los eficaces puntos de experiencia de guardado previo de C.

¡Efective C es un gran libro! . El valor absoluto del libro de Meyers

Debe leerse. Se puede decir que Meyers es uno de los mejores expertos técnicos del mundo C actual.

Sitio web recomendado:

www.royaloo.com

El siguiente texto debería haber sido pintado el año pasado, principalmente sobre la asignación de memoria dinámica. Echa un vistazo aquí de nuevo. De nuevo.

Siento que la escritura aún es demasiado superficial. Debido a que la memoria es el "patio de juegos" donde se ejecutan los programas, comprender el sitio será relativamente sencillo.

Afectan a la fluidez y estabilidad de nuestros programas.

C proporciona un operador nuevo para asignar memoria en el montón y un operador eliminar para liberar memoria. En algunos casos, los científicos necesitan un mejor control sobre la asignación y desasignación de memoria. Muchos programas crean y publican una gran cantidad de pares de clases importantes.

Como nodos de árbol, listas enlazadas, enlaces, puntos, líneas, mensajes, etc. Utilice puntos de memoria comunes.

Asignar y liberar estos objetos mediante adaptadores como nuevos y eliminar a veces puede dominar los requisitos de memoria y tiempo de ejecución de un programa.

Hay dos factores: operaciones generales de asignación de memoria y consumo de espacio, y fragmentación de la memoria causada por diferentes tamaños de objetos.

. El uso de un asignador de memoria personalizado en una clase acelerará la ejecución de emuladores, compiladores y programas similares.

Una excepción es cuando se requiere un mejor control de la memoria: necesita funcionar continuamente durante mucho tiempo con recursos limitados.

Este proyecto. Los sistemas en tiempo real a menudo requieren memoria predecible y garantizada a un costo mínimo. Esto también conduce a una mayor necesidad de un buen control de la memoria. En general, estos programas evitan la asignación de memoria dinámica y utilizan propósitos especiales.

Administra recursos limitados según el asignador de memoria.

Además, en algunos casos, debido a requisitos de hardware o del sistema, es necesario colocar el objeto en una ubicación de memoria específica. Esto también requiere una gestión de memoria personalizada (implementada sobrecargando nueva).

En la versión c 2.0, para satisfacer las necesidades anteriores, el mecanismo de administración de memoria también se ha modificado en consecuencia.

Las referencias principales

se dividen en adición de operador [] y eliminación de operador [].

Alcance de las capacidades del nuevo operador.

Alcance del operador (alcance)

*Operador nuevo global

nombre-clase::operador nueva clase

Operador nuevo El primer parámetro debe ser de tipo size_t (el tipo definido en STDDEF.h) y devuelve el tipo.

Es nulo*.

Al asignar un objeto de un tipo incorporado, un objeto de clase que no contiene una nueva función de operador definida por el usuario o cualquier matriz

que use el tipo, use el método global nueva función de operador. Al personalizar un nuevo operador en una clase.

Memoria, llama al nuevo operador de esta clase. Como se muestra a continuación:

#iincludes

#iincludes

Categoría en blanco

{

Público:

Blancos(){}

void * operator new( size_t stAllocateBlock, char chInit

};

void * Espacios en blanco:: operador nuevo( size_t stAllocateBlock, char chInit)

{

void * PV temp = malloc(stAllocateBlock);

if( pvTemp!= 0)

memset(pvTemp, chInit, stAllocateBlock);

Devolver pvTemp

}

int main()

{

Blancos *a5 = new (0xa5) espacios en blanco; //Crea objetos en blanco y conviértelo en 0xa5.

¡Regrese a a5! = 0;

}

El operador nuevo se puede sobrecargar, pero el operador de eliminación no se puede sobrecargar. Porque cuando se trata de liberar, lo único que tenemos es

que es un puntero. Además, es posible que el puntero no sea el puntero de tipo de objeto original (puede haber una conversión de tipo). Realidad

De hecho, cuando se usa new para obtener un puntero a una parte de la memoria, hay un indicador delante de la memoria.

, registra la cantidad real de memoria asignada. Llame a eliminar para conocer el tamaño de la memoria que debe liberarse.

Desasignar matriz:

void f()

{

X* p1 = new X[10];

// ...

Eliminar[]X;

}

¿Por qué no eliminar[10]X; para liberar memoria? Este enfoque puede conducir fácilmente a errores, afirma Bjarne Straustrup.

Incorrecto, elimina el número de elementos en la tarea de grabación.

En cuanto a la razón por la cual C no tiene recolección de basura incorporada, mire el diseño del lenguaje C.

Planificación y evolución (es) Bjarne Straustrup Machinery Industry Press (comúnmente conocida como D&e) puede obtener la respuesta.

Además, la biblioteca estándar de C proporciona un puntero inteligente auto_ptr, que puede ayudarnos a evitar fugas de recursos cuando se produce una excepción.

"Pero la desventaja es que un puntero inteligente no puede apuntar a una matriz porque se libera internamente.

El guardado se realiza eliminando en lugar de eliminando[]. Por lo tanto, solo se puede usar para apuntar a una única objeto.

La parte de la plantilla es la parte difícil de C, y también es el encanto de C. El siguiente texto es lo que vi antes, y la fuente del cadáver no está clara. un poco hoy. Como unidad de introducción de la plantilla.

¿Por qué utilizar plantillas?

Para funciones que son iguales excepto por el tipo (como la clasificación rápida), generalmente tenemos tres soluciones.

1. Escriba repetidamente entidades de función para cada tipo diferente (enfoque de lenguaje C):

int* quicksort(int a[]) {...}

doble* clasificación rápida (doble a[]) {...}

2. Usar objeto (enfoque Java) o void*

Hay dos desventajas.

También hay problemas de eficiencia.

Problemas de verificación de tipos

3. Usar mecanismo de preprocesamiento de macros

Desventajas: simplemente reemplazo de texto estúpido sin considerar el alcance y la seguridad de tipos.

Sin embargo, la aplicación de plantillas puede evitar estas deficiencias. Podemos escribir así:

Plantilla

T* quicksort(T a[]) {. .. }

Ventajas:

El código es conciso y elegante. Todos los tipos de parámetros se reemplazan por t, logrando verdaderamente la independencia de tipos.

Mejor seguridad de tipos, toda la verificación de tipos se realiza en tiempo de compilación, evitando

el uso de punteros.

Sin herencia, alta eficiencia. (1) No hay funciones virtuales; (2) Todo el trabajo se completa durante el período de compilación, lo que mejora enormemente la eficiencia operativa.

Propósito: decirle al compilador cómo tomar la mejor decisión, y esta elección

Esto se hace en tiempo de compilación.

Mecanismo de plantilla: especialización y deducción de argumentos

1 Especialización

Plantilla básica:

Plantilla

Clase. A{ // (1)

void f(T1 a, T2 b);

}

Especialización local (especialización parcial):

Clase de plantilla A { // (2)

void f(int a, T2 b);

}

O

Plantilla gtA class { // (3)

void f(T a, T b);

}

Profesional global (Especialización explícita):

Plantilla lt gt

Nivel A

void f(int a, int b); // (4)

}

Ejemplo de uso:

a* p 1; //(4) -se utilizará la especialización global

a* p2; //se utilizará (3) -especialización local

A * p3 //utilizará (2)-especialización local

A * p4 //utilizará (1)-generación de plantilla básica.

//A

Ventajas:

Por: especialización global - gt; especialización local ->; plantilla básica, esta secuencia de especialización (pesada La selección y combinación (reglas de análisis cargadas) las realiza automáticamente el compilador y no requieren participación manual.

Se pueden dar diferentes implementaciones según diferentes situaciones (como diferentes tipos, diferentes condiciones) para lograr una pertinencia más flexible.

Puede mejorar la escalabilidad del programa ante cualquier cambio.

2 Deducción de argumento verdadero

tSuma constante.

f(T const amp; 1, T constante ampb)

{

Devuelve a b; //1

}

int g = f(1,2);

De hecho, la función que debe coincidir con f(1,2) es int const;

¿Y de dónde surgió esta función?

Ventajas:

No es necesario proporcionar un par de corchetes angulares y variables independientes, como f(1, 2). Para ti

Usando la deducción de parámetros reales, podemos escribir f(1, 2).

Aplicación de plantillas

1. El código de plantilla de biblioteca estándar (STL) está en todas partes.

Biblioteca estándar = iterador de contenedor de algoritmo

Como lista/

2. Independencia de tipos (T)

3.

(1) Rasgo: utiliza principalmente muchos tipos de definición y especializaciones para especificar una característica.

// traces/accumtraits3.hpp

Plantilla

lass AcumulaciónRasgos

ctemplate lt gt

Categoría acumulada Características {

Público:

typedef int AccT

cuenta estática constante cero = 0;

};

Plantilla lt gt

Categoría Funciones acumuladas {

Público:

typedef int AccT

Constante de cuenta estática cero = 0;

};

Plantilla lt gt

Características acumulativas de categoría {

Público:

cuenta larga typedef;

Constante de cuenta estática cero = 0;

};

(2) Estrategia: generalmente expresada como una función, que especifica un comportamiento.

Class SumPolicy {

Público:

Plantilla

acumulación de vacíos estáticos (t 1 amp; t2 const amp; valor) {

Total=valor;

}

};

(3) Uso de funciones y estrategias:

Plantilla gt

Acumulación de categorías

Pública:

typedef typename características:: AccT AccT

Acumulación de cuenta estática (T const* beg, T const* end) {

Total de la cuenta = Rasgos::cero();

Y (preguntar!= fin) {

Política::acumular( Total, *find);

beg;

}

Devuelve el número total

}

};

4. Metaprogramación

La idea de compilación y recursividad

5. Nuevas formas de plantillas de diseño

(Más detalles más adelante Presentamos los puntos tercero, cuarto y quinto)

Introducción detallada a la versión china de la plantilla C

La parte 1 presenta los conceptos básicos de las plantillas y presenta estos conceptos básicos en un tutorial. estilo.

La segunda parte explica los detalles del idioma de las plantillas, que se pueden utilizar como manual de referencia para la construcción de plantillas.

La tercera parte presenta las técnicas de diseño básicas admitidas por las plantillas C, abarcando desde conceptos pequeños hasta usos complejos. Algunas técnicas no han aparecido en otros libros.

A partir de las dos primeras partes, la cuarta parte proporciona una discusión en profundidad de varias aplicaciones comunes que utilizan plantillas.