Du c au c ++ (quels changements ont été apportés au c ++ en fonction du langage c, et quelles sont les similitudes et les différences)

1. Du langage C au langage C ++
1. La relation entre le langage
C et le langage C ++ C: Comme nous le savons tous, le langage C est un langage structuré et modulaire orienté processus. Lorsque l'échelle du programme est petite, le langage C est pratique. Mais lorsque le problème est plus compliqué et que l'échelle du programme est plus grande, le langage C montrera ses limites.
C ++: C'est précisément parce qu'il y a des programmes à grande échelle à gérer que le C ++ est né. C ++ est développé à partir de C et est compatible avec le langage C. Le C ++ peut être utilisé non seulement pour la programmation structurée orientée processus, mais aussi pour la programmation orientée objet. C'est un puissant langage de programmation hybride.
Résumé:
1. Le langage C est orienté processus, et C ++ peut être à la fois orienté processus et orienté objet.
2. C ++ est développé sur la base de C, et C ++ est un sur-ensemble du langage C.
3. Toute la syntaxe du langage C peut être utilisée en C ++.

2. C ++ a été développé sur la base de C
1. Fichiers
d'en-tête Une partie des fichiers d'en-tête du langage C est conservée en C ++, le suffixe ".h "est supprimé et" c "est ajouté devant le nom du fichier, comme suit:
style C style C ++
stdio.h cstdio / iostream
math.h cmath
string.h cstring
stdlib.h cstdlib
……
2.
Portée Il n'y a que deux portées en langage C: local et global.
En C ++, il existe trois types: la portée locale, la portée de classe et la portée de l'espace de noms.
Espace de noms Espace de
noms Espace de noms Espace de noms Espace de noms

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

using using namespace
using myname :: a; // Utilise un
using namespace myname; // Utilise tout

3. Entrée et sortie
Bien que nous conservions stdio.h autant que possible et l'utilisions comme cstdio en C ++, C ++ utilise des fichiers d'en-tête tels que iostream comme fichiers d'en-tête de sortie et de sortie. Iostream couvre presque tout le contenu de stdio.h et en développe certains autres applications.
En langage C, nous utilisons des fonctions telles que printf et scanf pour l'entrée et la sortie.
Pour C ++, nous utilisons le cout cin endl plus avancé, qui sont tous des objets. Nommé dans 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. Type de données de base Type
booléen: bool
1. Un nouveau type bool est ajouté à C ++ 2. Le
type bool n'a que deux valeurs constantes: true true false false
3. En fonctionnement réel, traitez true comme 1 et traitez
Treat false comme 0 . 4. le type bool rend le code plus intuitive, en distinguant logique vrai et le faux , et les valeurs 1 et 0.
5. le type de bool occupe un seul octet.
6. Structure
En C, le nom de la structure ne peut pas être utilisé directement comme nom de type et une structure doit être ajoutée.
En C ++ , le nom de la structure peut être utilisé comme nom de type et la structure peut être omise.

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

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

Les fonctions ne peuvent pas être définies dans les structures en C.
Les fonctions peuvent être définies à l'intérieur de la structure en C ++.

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

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

6. Conversion de type forcée

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. Opérateurs conditionnels:?:
En langage C, les expressions d'opération conditionnelle ne peuvent pas être affectées directement. Seule sa valeur de retour peut être utilisée.
En C ++, des expressions d'opérations conditionnelles peuvent être affectées. Les expressions d'opération conditionnelle peuvent être utilisées comme valeurs l.

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

8. Boucle For
Dans le langage C, les variables de boucle de la boucle for doivent être définies à l'avance puis utilisées.
En C ++, vous pouvez définir une variable de boucle dans l'expression 1 de la boucle for, et sa portée atteint la fin de la boucle.

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

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

9. Opérateur d'étendue ::
1. S'il n'y a rien devant ::, global.
2. La portée et l'espace de noms de la classe

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

10. Allocation dynamique de la mémoire Le
langage de programmation ouvre la méthode de libération de la mémoire
Fonction libre de malloc
C Nouvel opérateur de suppression C ++

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. Références de variables: &
1. C ++ est une extension importante sur la base de C.
2. Fonction: Alias ​​d'une variable pour partager la mémoire.
3. La déclaration d'un type de référence n'ouvre pas de nouvel espace.
4. Il doit être initialisé lors de la déclaration d'un type de référence.

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. Fonction intégrée de fonction en ligne
Processus de compilation:
1. Prétraiter .cpp -> .i
.cpp -> développer les fichiers d'en-tête, les fichiers de bibliothèque et les définitions de macro
2. Assembler .i -> .S
pour convertir le code en code d'assemblage
3. Étape de compilation. S -> .obj
convertit le code d'assemblage en binaire
4. Étape de liaison obj 2.obj 3.obj ->. exe
lie le fichier .obj pour former un fichier exécutable

Lors de l'appel de fonctions, une certaine quantité de temps et d'espace est nécessaire. Comme indiqué à droite:
en langage C, nous utilisons des fonctions macro.
#define FUN (a, b) (a * b + a / b)

En C ++, nous utilisons des fonctions en ligne.
Mot-clé: inline Lors de la
compilation, le code de la fonction appelée est directement intégré dans la fonction appelante.

Remarque:
1. Les fonctions intégrées n'affectent que le processus de compilation.
2. Utilisez les fonctions intégrées pour gagner du temps. Mais augmentez la longueur du code cible.
3. Utilisez uniquement des fonctions à petite échelle comme fonctions intégrées (dans les 5 lignes).
4. Les fonctions intégrées ne peuvent pas contenir d'instructions de contrôle complexes, d'instructions de boucle et d'instructions de commutation.
5. Inline n'est pas une déclaration prescriptive, mais une suggestion d'un programmeur au système de compilation.
L'adoption ou non du système de compilation dépend de la situation.

13. Fonctions avec paramètres par défaut
1. Lors de la déclaration d'une fonction, vous pouvez donner des valeurs par défaut à certains paramètres.
2. Lors de l'appel, il existe des paramètres par défaut avec des valeurs par défaut et les valeurs par défaut sont automatiquement utilisées.
3. Lors de l'appel, le nombre réel de paramètres> = le nombre de paramètres formels-le nombre de paramètres par défaut
4. Les paramètres par défaut doivent être placés à droite.

#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. Surcharge de fonction
1. Le même nom de fonction, le même nombre, le type et l'ordre des paramètres sont différents.
2. Le type de valeur de retour n'est pas pour référence.
1. Même nom et même corps, différents types de paramètres

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. Le même nom est différent, le nombre de paramètres est différent

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;
}

Résumé: Encore une utilisation
1. Le nom de la fonction est le même, mais le type ou le numéro de paramètre est différent.
2. Donnez une nouvelle signification au nom de la fonction, un nom de fonction a plusieurs effets.
3. Même fonction avec des détails différents. N'implémentez pas de fonctions totalement indépendantes.
4. Il existe au moins une différence dans le nombre, le type et l'ordre des paramètres. Les types de valeur de retour peuvent être identiques ou différents.
5. La surcharge de fonction n'est pas en conflit avec les fonctions avec des paramètres par défaut.

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. Un autre rôle important de la surcharge de fonctions: surcharge d'opérateurs Opérateur
complexe + (Complex & c1, Complex & c2);

15. Modèle de fonction (modèle de fonction)
Modèle de fonction:
1. Établissez une fonction générale, le type de fonction et le type de paramètres formels n'ont pas besoin d'être spécifiés, mais un type virtuel à représenter. Paramétrez le type de données.
2. Les modèles de fonction peuvent être utilisés pour plusieurs fonctions avec le même corps de fonction.
Il existe les fonctions surchargées suivantes:

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

Créer un modèle:
déclaration d'un modèle de fonction:

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

Définition du modèle de fonction:

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

Appel de fonction:

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;

Paramétrage:
transformez des données spécifiques en paramètres pour résoudre différents problèmes de données.
Transformez des types de données spécifiques en paramètres pour résoudre les problèmes de différents types de données.
Le paramétrage est un mode de pensée qui doit être maîtrisé dans le processus de développement logiciel. Il propose de remplacer toutes les mêmes données par des paramètres. En utilisation réelle, nous n'avons besoin que d'apporter des données ou types spécifiques dans les paramètres.

Je suppose que tu aimes

Origine blog.csdn.net/DR5200/article/details/111275148
conseillé
Classement