Android 音视频入门之C++入门序列(二)- 函数

C里面函数写法

void change(int *num1, int *num2) {
    int temp = 0;
    temp = *num1;
    *num1 = *num2;
    *num2 = temp;
}

C++写法

// & 代表是引用
void change2(int &num1, int &num2) {

    std::cout << "change2 " << "n1的地址: " << &num1 << ", n2的地址: " << &num2 << std::endl;
    int temp = 0;
    temp = num1;
    num1 = num2;
    num2 = temp;
}

& 这个符号在C++里面效果是怎样

void change2(int &num1, int &num2) {
	 std::cout << "change2 " << "n1的地址: " << &num1 << ", n2的地址: " << &num2 << std::endl; 
}

int main () {
	int num1 = 10;
	int num2 = 10;
	// 在这先打印一下num1 和num2的地址看看是多少
	std::cout << "main " << "num1的地址: " << &num1 << ", num2的地址: " << &num2 << std::endl;
	// 打印结果: main num1的地址: 00CFFD64, num2的地址: 00CFFD58
	// 再调用一下change2方法 
	change2(num1, num2); // 直接传num1, num2就可以 
	// 打印结果: change2 n1的地址: 00CFFD64, n2的地址: 00CFFD58
	// 上面二个结果行出结论,当参数里面有&这个符号相当于C里面传地址 C++的叫法是引用

	// 再来个例子
	int n1 =  99;
	int n2 =n1;
	std::cout << "main " << "n1的地址: " << &n1 << ", n2的地址: " << &n2 << std::endl;
	// 打印结果:main n1的地址: 00CFFD4C, n2的地址: 00CFFD40
	// 二个地址不一样

	int  nn1 = 99;
	int & nn2 = nn1;
	std::cout << "main " << "nn1的地址: " << &nn1 << ", nn2的地址: " << &nn2 << std::endl;
	// 打印结果:main nn1的地址: 00CFFD34, nn2的地址: 00CFFD34 
	// 二个地址一样

	// 结论: &代表是一个引用 ,意思就是在nn1引用  添加了一个nn2 二个指向的都是同一个地址
	// 就比如李白 名字叫李白, 他也叫诗仙。 其实指向是同一个人 他还可以叫酒仙等 其它小名
}

C里面一些不足的地方

比如我们要插入一个数据到数据库 C的写法

// 插入数据库, Student的 信息给插入数据库 下面C里面写法就可以随便改student里面值
void insertStudent(Student student) {
    // c里面 假如有内鬼
    strcpy(student.name, "Liyuanba");
}
// 当我们插入数据时就可以随便改,但是C++是不一样的 C++里面有常量引用这一说法

C++写法

//常量引用: C++里面可以使用常量引用来不让修改, === const Student &
void insertStudent2(const Student &student) {
    // c里面 假如内鬼
//    strcpy(student.name,"Liyuanba");

    // 只读的 可以安心的插入数据库
    cout << student.name << endl;
}

函数重载

C里面是没有函数重载 但是C++里面有 如下面三个方法是允许的

int add (int num1){
}

int add (int num1, int num2){
}

int add (int num1, int num2, int num3){
}

函数高级写法

// int 是一个无形参数 
void uploadLog(char *logText, int) {  
	// int 这个值的作用是方便拓展,
	// 上传日志到服务器 前期没有考虑好,为了防止扩展功能,你必须传递一个int类型参数 方便拓展
	
}

// 半年后这个int忽然有用处了,我只需要重新改造一下这个方法就行

```cpp
void uploadLog(char *logText, int model) {

}

C++对象写法规范

首先要有头文件.h, 然后要用实现文件
例子:
先创建一个头文件 Student.h


#ifndef THIRD_STUDENT1_H
#define THIRD_STUDENT1_H

#endif //THIRD_STUDENT1_H
#include 

// .h只写声明,不写实现
using namespace std;
class Student {
private:// 下面代码 成员 函数都是 私有
    char * name;
    int age;
public:// 下面代码 成员 函数都是 公开
    void setAge(int age);
    void setName(char * name);
    int getAge();
    char * getName();
};

再创建一个实现文件Student.cpp

#include "Student.h"

void Student::setAge(int age) {
    // C++对象指向的是一个指针
    // ->调用一级指针的成员
    this->age = age;
}

int Student::getAge() {
    return this->age;
}

void Student::setName(char *name) {
    this->name = name;
}

char *Student::getName() {
    return this->name;
}

使用:

#include "Student1.h"
int main () {
	Student student; // 栈区开辟空间
    // 赋值
    student1.setAge(33);
    student1.setName("李软衬材料");
    cout << "name:" << student1.getName() << ", age" << student1.getAge() << endl;

    // 堆空间
    Student1 *student11 = new Student1(); // new 对应delete
    student11->setName("liyuandni");
    if (student11) {
        delete student11;// 必须手动释放堆空间对象
        student11 = NULL;
    }
//    free(student11  // 不能这样写,不规范,会被鄙视

    return 0;
}

你可能感兴趣的:(学习,c++)