1.C语言与c++语言区别
// C语言的标准支持
#include<stdio.h>
// C++标准支持
#include <iostream>
// 命名空间 C++ 的特性
using namespace std;
#C++语言面向对象 + 标准特性
#C语言面向过程,函数+结构体
#C++里面可以运行C语言,可以调用C语言,反之 就不行C语言无法运行C++
2.C语言的常量与C++的常量
2.1.c语言的常量是假常量,通过指针可以修改
#include <stdio.h>
int main() {
const int number = 10;
// number = 20; //不能直接修改 但是可以通过指针修改
int * number1=&umber;
*number1 = 20;
printf("%d\n", number);
return 0;
}
c语言的常量不能直接修改, 但是可以通过指针修改。
2.2.C++语言的常量是真常量
#include <iostream>
int main() {
const int number = 10;
// number = 20;
// 我的编译器,编译不通过, 有的编译器,编译通过,但是运行报错
// int * number1 = &number;
// *number1 = 20;
printf("%d\n", number);
return 0;
}
c++的常量 不管是指针还是直接修改都不允许
3.C++引用和常量引用
3.1.c语言交换两个数,需要通过指针传递
void numberChange(int * number1, int * number2) {
int temp = 0;
temp = *number1;
*number1 = *number2;
*number2 = temp;
}
3.2.C++ 提倡使用引用
void numberChange2(int & number1, int & number2){
// 不使用引用 传进来的两个数的地址就变了
//使用引用传进来的两个参数引用未发生改变
cout << "numberChange2 " << "n1地址:" << &number1 << " , n2地址:" << &number2 <<endl;
int temp=0;
temp=number1;
number1=number2;
number2=temp;
return;
}
- 不使用引用 传进来的两个数的地址就变了
- 使用引用传进来的两个参数引用未发生改变
4.常量引用
//声明结构体
typedef struct{
char name[20];
int age;
} Student1;
void insertStudent(const Student1 & student){
// strcpy(student.name,"宁荣荣"); // 没有常量,可以这样修改
//Student1 student1={"胡列娜",20};
// student=student1; //添加常量不允许这样修改
cout << student.name << "," << student.age << endl;
}
传递过来的参数,如果没有被const修饰的时候,student的内容是可以被修改的,如果被const修饰则不可修改。
5.函数重载
C语言不支持函数重载
C++重载 == Java重载 优先执行不带默认参数的重载方法
int add(int number1) {
return number1;
}
int add(int number1, int number2) {
return number1 + number2;
}
// C++重载 == Java重载 优先执行不带默认参数的重载方法
int add(int number1, int number2, int number3) {
cout<<"不带默认参数"<<endl;
return number1 + number2 + number3;
}
// 函数重载 二义性
// 优先执行不带默认参数的重载方法, 跟顺序无关
int add(double n1 , int n2, int n3, int n4 = 400, bool isOK = 0) {
cout<<"默认参数"<<endl;
return 0;
}
6.无参数名参数
void JNIMethod(double, double, int, int) {
}
类似这样的方法声明,无参数名的参数,出现这个情况,参数无法使用,但是以后如果想用也很简单 只需要加上参数名就可以了,不需要改调用位置。
7.c++面向对象
Student student1; // 栈区开辟空间的 main函数弹栈后,会释放栈成员 student1
// 下面是堆空间
Student * student2 = new Student(); // new/delete
if (student2){
delete student2; // 必须手动释放堆空间的对象student2
student2 = nullptr; // 指向nullptr的地址区域
// free(student2); // 不能这样写不规范
}
- 在栈区声明的内存,函数弹栈会自动释放
- 在堆区声明的对象空间,需要使用delete进行删除,删除后需要指向nullptr,不能直接使用free函数删除。
- 使用malloc分配的内存,使用free进行删除。
8.c++中的bool
// bool isOK = 1; // !0 就true
// bool isOK = -8891; // !0 就true
bool isOK = 4359; // !0 就true
// bool isOK = 0; // 0 就false
// 只有两个类型: !0 0
// 和前面的C一模一样
if (isOK) {
cout << "真" << endl;
} else {
cout << "假" << endl;
}
// ==========================
bool isRun = false;
isRun = 100;
cout << isRun << endl; // true==1, false=0
c++中的bool,只要非0就是true,输出的时候,不管赋值是多少,只要非0就输出1。