Android NDK篇-C++之面向对象汇总

本文对比了C语言和C++语言的主要差异,包括面向过程与面向对象、常量行为、引用的使用、函数重载以及内存管理等方面。C++引入了命名空间、常量引用和函数重载等特性,增强了安全性。同时,C++中的常量不可通过指针修改,而C语言则可以。此外,C++中使用引用能更安全地交换变量值,且支持堆内存的动态管理,需要手动释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值