De c a c ++ (qué cambios se han realizado a c ++ en función del lenguaje c y cuáles son las similitudes y diferencias)

1. Del lenguaje C al lenguaje C ++
1. La relación entre el lenguaje
C y el lenguaje C ++ C: Como todos sabemos, el lenguaje C es un lenguaje estructurado y modular y está orientado a procesos. Cuando la escala del programa es pequeña, el lenguaje C es útil. Pero cuando el problema es más complicado y la escala del programa es mayor, el lenguaje C mostrará sus limitaciones.
C ++: Es precisamente porque hay programas a gran escala con los que lidiar, C ++ nació. C ++ está desarrollado a partir de C y es compatible con el lenguaje C. C ++ se puede utilizar no solo para la programación estructurada orientada a procesos, sino también para la programación orientada a objetos, ya que es un potente lenguaje de programación híbrido.
Resumen:
1. El lenguaje C está orientado a procesos, y C ++ puede estar orientado tanto a procesos como a objetos.
2. C ++ se desarrolla sobre la base de C, y C ++ es un superconjunto del lenguaje C.
3. Toda la sintaxis del lenguaje C se puede utilizar en C ++.

2. C ++ se ha expandido sobre la base de C
1. Archivos de encabezado
Parte de los archivos de encabezado del lenguaje C se conservan en C ++, se elimina el sufijo '.h' y se agrega 'c' delante del nombre del archivo, de la siguiente manera:
estilo C estilo C ++
stdio.h cstdio / iostream
math.h cmath
string.h cstring
stdlib.h cstdlib
……
2.
Ámbito En el lenguaje C sólo hay dos ámbitos : local y global.
En C ++, hay tres tipos: ámbito local, ámbito de clase y ámbito de espacio de nombres.
Espacio de nombres Espacio de
nombres Espacio de nombres Espacio de nombres Espacio de nombres

namespace myname
{
    
    
	int a;
	int Max();
	int Min();
}
namespace yourname
{
    
    
    int a;
    int Max();
}
int main()
{
    
    
	myname::Max();
	yourname::Max();
	return 0;
}

using using using namespace
using myname :: a; // Use a
using using namespace myname; // Use all

3. Entrada y salida
Aunque mantenemos stdio.h tanto como sea posible y lo usamos como cstdio en C ++, C ++ usa archivos de encabezado como iostream como archivos de encabezado de salida y salida. Iostream cubre casi todo el contenido de stdio.h y expande algunos otras aplicaciones.
En lenguaje C, usamos funciones como printf y scanf para entrada y salida.
Para C ++, usamos el cout cin endl más avanzado, que son todos objetos. Nombrado en std.

//一个简单的C++程序这样写
#include <iostream>		//输入输出头文件
using namespace std;		//使用std命名空间
int main()
{
    
    
	cout << "hello world" << endl; //输出"hello world"换行
	return 0;
}


#include <iostream>  
using namespace std; 
int main()
{
    
    
	cout << "hello" << endl;
	int  a = 10;
	float b = 20.5;
	char c = 'C';
	cout << a << " " << b << " " << c << endl;
	cin >> a;
	cin >> b;
	cin >> c;
	return 0;
}

4. Los datos básicos Tipo de
tipo booleano: bool
se añade 1. Un nuevo tipo bool a C ++ 2. El bool
tipo tiene solamente dos valores constantes: true true false falsos
3. En el funcionamiento real, delicia verdaderos como 1 y tratar
Treat falso como 0 . 4. el tipo bool hace que el código más intuitiva, distinguiendo entre lógico verdadero y falso y los valores 1 y 0.
5. el tipo bool ocupa sólo un byte.
6. Estructura
En C, el nombre de la estructura no se puede usar directamente como el nombre del tipo, y se debe agregar la estructura.
En C ++ , el nombre de la estructura se puede usar como el nombre del tipo y la estructura se puede omitir.

//学生结构体 :自定义的类型
struct Stu
{
    
    
	char name[20];
	int num;
	int age;
};

struct Stu ACan; // struct Stu
Stu Me en C; // C ++ usa Stu

Las funciones no se pueden definir en estructuras en C.
Las funciones se pueden definir dentro de la estructura en C ++.

//学生结构体 :自定义的类型
struct Stu
{
    
    
	char name[20];
	int num;
	int age;

	void Fun();
	void GameInit();
};

6. Conversión de tipo forzada

double a = 3.8;
double b = 6.6;
int c = 30, d;
d = c + (int)(a*b); //C风格
d = c + int(a*b);   //C++风格

7. Operadores condicionales:?:
En lenguaje C, las expresiones de operaciones condicionales no se pueden asignar directamente. Solo se puede usar su valor de retorno.
En C ++, se pueden asignar expresiones de operaciones condicionales. Las expresiones de operaciones condicionales se pueden usar como lvalores.

int a = 10;
int b = 15;
a > b ? a : b=20;    //15=20 错误的
(a > b ? a : b) = 20; //b=20 OK的

8. Bucle for
En el lenguaje C, las variables de bucle del bucle for deben definirse de antemano y luego utilizarse.
En C ++, puede definir una variable de bucle en la expresión 1 del bucle for y su alcance llega al final del bucle.

int i;
for (i = 0; i < 10; i++)
{
    
    
	//C风格
}

for (int i = 0; i < 10; i++)
{
    
    
		//C++风格
}

9. Operador de alcance ::
1. Si no hay nada delante de ::, global.
2. El alcance y el espacio de nombres de la clase.

#include <iostream>
int a = 10;
int main()
{
    
    
    int a = 5;
    std::cout << "hello world" << std::endl;
    std::cout << ::a << std::endl;
    return 0;
}

10. Asignación dinámica de memoria El
lenguaje de programación abre el método de liberación de memoria
C función libre de malloc
C ++ nuevo operador de eliminación

int *p1 = new int;  //p1指向一个int的内存空间
int *p2 = new int(5);//p2指向一个int的内存空间,初始化为5
int *p3 = new int[5];//p3指向一个5个元素的int数组
delete p1;
delete p2;
delete []p3;

11. Referencias de variables: &
1. C ++ es una expansión importante sobre la base de C.
2. Función: Alias ​​de una variable para compartir memoria.
3. Declarar un tipo de referencia no abre un nuevo espacio.
4. Debe inicializarse al declarar un tipo de referencia.

int a;  //声明一个变量a
int &b = a; //声明b是a的引用
//改变a即是改变b
a = 50;
cout << "b="<< b << endl;
//改变b即是改变a
b = 100;
cout << "a=" << a << endl;

12. Función incorporada en línea
Proceso de compilación:
1. Procesar previamente .cpp -> .i
.cpp -> expandir archivos de encabezado, archivos de biblioteca y definiciones de macros
2. Ensamblar .i -> .S
para convertir el código en código ensamblador
3. Etapa de compilación. S -> .obj
convierte el código ensamblador en binario
4. Enlace etapa obj 2.obj 3.obj ->. exe
vincula el archivo .obj para formar un archivo ejecutable

Al llamar a funciones, se requiere una cierta cantidad de tiempo y espacio. Como se muestra a la derecha:
En lenguaje C, usamos funciones macro.
#define DIVERSIÓN (a, b) (a * b + a / b)

En C ++ usamos funciones en línea.
Palabra clave: en línea Al
compilar, el código de la función llamada se incrusta directamente en la función de llamada.

Nota:
1. Las funciones integradas solo afectan el proceso de compilación.
2. Utilice las funciones integradas para ahorrar tiempo de ejecución. Pero aumente la longitud del código de destino.
3. Utilice sólo funciones de pequeña escala como funciones integradas (dentro de 5 líneas)
4. Las funciones integradas no pueden contener declaraciones de control complejas, declaraciones de bucle y declaraciones de conmutación.
5. Inline no es una declaración prescriptiva, sino una sugerencia del programador al sistema de compilación.
La adopción o no del sistema de compilación depende de la situación.

13. Funciones con parámetros predeterminados
1. Al declarar una función, puede dar algunos valores predeterminados de parámetros.
2. Al llamar, hay parámetros predeterminados con valores predeterminados y los valores predeterminados se utilizan automáticamente.
3. Al llamar, el número real de parámetros> = el número de parámetros formales - el número de parámetros predeterminados
4. Los parámetros predeterminados deben colocarse a la derecha.

#include <iostream>
using namespace std;
int Max(int a= 12, int b= 13, int c= 15)
{
    
    
	if (b > a)a = b;
	if (c > a)a = c;
	return a;
}
int main()
{
    
    
	int x = 10, y = 20, z = 18;
	cout << Max() << endl;
	cout << Max(x) << endl;
	cout << Max(x,y) << endl;
	cout << Max(x, y, z) << endl;
     return 0;
}

14. Sobrecarga de funciones
1. El mismo nombre de función, el número, el tipo y el orden de los parámetros son diferentes.
2. El tipo de valor devuelto no es para referencia.
1. Mismo nombre y mismo cuerpo, diferentes tipos de parámetros

int Max(int a, int b, int c)
{
    
    
	if (c > a)a = c;
	if (b > a)a = b;
	return a;
}

double Max(double a, double b, double c)
{
    
    
	if (c > a)a = c;
	if (b > a)a = b;
	return a;
}

2. El mismo nombre es diferente, el número de parámetros es diferente

int Max(int a, int b, int c)
{
    
    
	if (c > a)a = c;
	if (b > a)a = b;
	return a;
}

int Max(int a, int b)
{
    
    
	if (b > a)a = b;
	return a;
}

Resumen: Un uso más
1. El nombre de la función es el mismo, pero el tipo o número de parámetro es diferente.
2. Dar un nuevo significado al nombre de la función, un nombre de función tiene múltiples efectos.
3. Misma función con diferentes detalles. No implemente funciones completamente ajenas.
4. Hay al menos una diferencia en el número, tipo y orden de los parámetros. Los tipos de valor devuelto pueden ser iguales o diferentes.
5. La sobrecarga de funciones no entra en conflicto con funciones con parámetros predeterminados.

int Max(int a, int b, int c = 15)
{
    
    
	if (c > a)a = c;
	if (b > a)a = b;
	return a;
}

int Max(int a, int b)
{
    
    
	if (b > a)a = b;
	return a;
}
//以上2个函数:我们去调用: Max(10,15); 有歧义!!

6. Otro papel importante de la sobrecarga de funciones: sobrecarga del operador
Complex operator + (Complex & c1, Complex & c2);

15. Plantilla de función (plantilla de función) Plantilla de
función:
1. Establecer una función general, no es necesario especificar el tipo de función y el tipo de parámetros formales, sino un tipo virtual a representar. Parametrice el tipo de datos.
2. Las plantillas de funciones se pueden utilizar para varias funciones con el mismo cuerpo de función.
Existen las siguientes funciones sobrecargadas:

int 		Max(int, int, int);
float 	Max(float, float, float);
double 	Max(double, double, double);

Crear una plantilla:
declaración de una plantilla de función:

template<typename _Ty1>   //这个_Ty1就是虚拟类型
template<class_Ty2>  	 //类模板

Definición de plantilla de función:

_Ty1 Max(_Ty1 a, _Ty1 b, _Ty1 c)
{
    
    
	if (c > a)a = c;
	if (b > a)a = b;
	return a;
}

Llamada de función:

int x=10, y=15, z=20;
int max = Max(x, y, z);
cout << max << endl;

float x1 = 10.2,  y1= 15.6,  z1 = 20.8;
float max1 = Max(x1, y1, z1);
cout << max1 << endl;

double x2 = 0.2,  y2 = 5.6,  z2 = 2.8;
double max2 = Max(x2, y2, z2);
cout << max2 << endl;

Parametrización:
convierta datos específicos en parámetros para resolver diferentes problemas de datos.
Convierta tipos de datos específicos en parámetros para resolver los problemas de diferentes tipos de datos.
La parametrización es un modo de pensar que debe poseerse en el proceso de desarrollo de software. Propone reemplazar todos los mismos datos con parámetros. En el uso real, solo necesitamos traer datos o tipos específicos a los parámetros.

Supongo que te gusta

Origin blog.csdn.net/DR5200/article/details/111275148
Recomendado
Clasificación