1.C语言与C++语言的区别
- C++面向对象
- C 面向过程 函数+结构体
- C++可以运行调用C语言 反之 C语言无法运行C++
2.常量之C的常量与C++的常量
int main() {
const int num = 9;
int *p = #
*p = 100;
printf("num=%d\n", num);
return 0;
}
#include <iostream>
int main() {
const int num = 9;
int *p = # //这里直接报错 编译报错
*p = 100;
std::cout << "num=" << num << std::endl;
return 0;
}
3.引用的原理与常量的引用
int main() {
int num1 = 90;
int &num2 = num1;
cout << "num1的地址:" << &num1 << " num1的值:" << num1 << endl;
cout << "num2的地址:" << &num2 << " num1的值:" << num2 << endl;
return 0;
}
输出:
num1的地址:0x61fe44 num1的值:90
num2的地址:0x61fe44 num1的值:90
- 行参如果不使用引用,会生成新的内存地址
- 引用类型 不会开辟新的内存地址 只是取一个别名
//形参不是引用类型是 值复制 值传递
void function1(int num) {
cout << "num的地址:" << &num << endl;
}
//形参是引用类型 内存地址是一样的
void function2(int &num) {
cout << "num的地址:" << &num << endl;
}
int main() {
int num1 = 90;
int &num2 = num1;
cout << "num1的地址:" << &num1 << " num1的值:" << num1 << endl;
cout << "num2的地址:" << &num2 << " num1的值:" << num2 << endl;
function1(num1);
function2(num1);
return 0;
}
输出:
num1的地址:0x61fe44 num1的值:90
num2的地址:0x61fe44 num1的值:90
num的地址:0x61fe20
num的地址:0x61fe44
int main() {
int num1 = 90;
int &num2 = num1;
const int &num3 = num1; //常量的引用类型
num2 = 100;
// num3 = 99;//这里直接报错 常量引用类型不能修改值
cout << "num1的地址:" << &num1 << " num1的值:" << num1 << endl;
cout << "num2的地址:" << &num2 << " num1的值:" << num2 << endl;
return 0;
}
4.函数重载与默认行参,无行参名的特殊用法
- C语言不支持函数重载
- C++ 语言支持函数重载 支持默认行参
// 函数重载
void func(int num1) {
cout << "num1的值:" << num1 << endl;
}
void func(int num1, int num2) {
cout << "num1+num2的值:" << num1 + num2 << endl;
}
int main() {
func(20);
func(100, 200);
return 0;
}
输出:
num1的值:20
num1+num2的值:300
// 默认形参
void func(int num1, int num2 = 66) {
cout << "num1+num2的值:" << num1 + num2 << endl;
}
int main() {
func(20);
func(100, 200);
return 0;
}
输出:
num1+num2的值:86
num1+num2的值:300
- 无行参名的函数 只定义参数类型 为了后期好扩展 可以添加参数名,然后再处理逻辑
void change(int num1, int) {
}
int main() {
change(100, 200);
return 0;
}
5.C++面向对象
//Student.h 头文件 只写声明 不写实现
class Student {
private:
char *name;
int age;
public:
void setName(char *name);
void setAge(int age);
char *getName();
int getAge();
};
// Student.cpp 实现文件 根据声明 来写实现
#include "Student.h"
void Student::setName(char *name) {
this->name = name;
}
char *Student::getName() {
return this->name;
}
void Student::setAge(int age) {
this->age = age;
}
int Student::getAge() {
return this->age;
}
- 对象的编写 赋值 调用 C++的对象指向的是一个指针
int main() {
Student student; //栈区开辟
student.setName((char *) "老六");
student.setAge(20);
cout << "student的name:" << student.getName() << " age:" << student.getAge() << endl;
Student *stu = new Student; //堆区开辟开辟内存
stu->setName((char *) "老王");
stu->setAge(36);
cout << "stu的name:" << stu->getName() << " age:" << stu->getAge() << endl;
delete stu; //需要手动释放
stu = NULL; //指向空指针
return 0;
}
网友评论