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 <iostream>
// .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;
}