注:编码工具是CLion+Cygwin64
目录
与C区别
C语言是面向过程的,C++是面向对象的。
C语言环境不能运行C++代码,C++环境可以运行C代码。
C语言的常量是伪常量,C++的常量是真常量。
C语言不允许函数重载,C++允许函数重载。
常量
C语言
可以通过指针的间接修改常量的值。
#include <stdio.h>
int main(){
const int num = 100;
printf("num = %d\n", num);
// num = 10000; // 编译不通过
int * num_p = #
*num_p = 10000;
printf("num = %d\n", num);
return 0;
}
输出:
num = 100
num = 10000
C++
#include<stdio.h>
int main() {
const int num = 100;
printf("num = %d\n", num);
// num = 10000; // 编译不通过
// int *num_p = #// 编译不通过
return 0;
}
输出:
num = 100
引用与常量引用
引用:是内存地址的别名。通过 数据类型& 的格式定义。
通过引用方式交换两个变量值
#include <iostream> // C++标准IO
using namespace std;// 命名空间
void swap(int &a, int &b){
int tmp = a;
a = b;
b = tmp;
}
int main(){
int num1 = 99;
int num2 = 100;
cout << "num1 = " << num1 << ", num2 = " << num2 << endl;
/**
* cout:C++输出
* << 运算符重载
* endl 相当于 \n
*/
swap(num1, num2);
cout << "num1 = " << num1 << ", num2 = " << num2 << endl;
return 0;
}
输出:
num1 = 99, num2 = 100
num1 = 100, num2 = 99
常量引用
当只需要展示数据而不允许修改数据的时候,使用常量引用。
#include <iostream>
using namespace std;
void show(const int & a){// 用对象更能体现常量引用的效果
// a = 10000;// 编译不通过
cout << "a = " << a << endl;
}
int main(){
show(100);
return 0;
}
输出:
a = 100
函数重载
C语言
#include <stdio.h>
int add(int a, int b){
return a + b;
}
// 编译报错
//int add(int a, int b, int c){
// return a + b + c;
//}
int main(){
return 0;
}
C++
#include <iostream>
using namespace std;
int add(int a, int b){
return a + b;
}
int add(int a, int b, int c){
return a + b + c;
}
int main(){
int num = 99, num2 = 100, num3 = 10000;
cout << num << " + " << num2 << " = " << add(num, num2) << endl;
cout << num << " + " << num2 << " + " << num3 << " = " << add(num, num2, num3) << endl;
return 0;
}
输出:
99 + 100 = 199
99 + 100 + 10000 = 10199
默认形参
#include <iostream>
using namespace std;
int add(int a = 3, int b = 99){
return a + b;
}
int main(){
int num = 99, num2 = 100;
cout << add() << endl;
cout << add(num) << endl;
cout << num << " + " << num2 << " = " << add(num, num2) << endl;
return 0;
}
输出:
102
198
99 + 100 = 199
无形参变量名的特殊写法
方法声明的部分参数只有数据类型,没有变量名,C++源码里有这种写法,可能为了以后扩展提前占位。
#include <iostream>
using namespace std;
void log(char * text, int, int){
cout << "text = " << text << endl;
}
int main(){
log("日志内容", 1, 1);
return 0;
}
输出:
text = 日志内容
类初探
类的标准定义方法:
同时定义头文件和实现文件。
头文件中只定义变量和函数声明。
实现文件中存放类的函数实现。
头文件:
class Student{
private:
char * name;
int age;
public:
void setName(char* name);
void setAge(int age);
char * getName();
int getAge();
};
实现文件:
#include "Student.h"
void Student::setName(char *name) {
this->name = name;
}
void Student::setAge(int age) {
this->age = age;
}
char * Student::getName() {
return this->name;
}
int Student::getAge() {
return this->age;
}
对象创建
有静态和动态两种开辟内存方式创建。
动态创建需要用关键字new,释放需要手动调用delete。new和delete成对。类似malloc和free。
#include <iostream>
#include "Student.h"
using namespace std;
int main(){
Student stu;// 静态开辟内存方式创建,函数执行完会自动释放内存
stu.setName("张无忌");
stu.setAge(18);
cout << stu.getName() << ", " << stu.getAge() << endl;
// 带不带()都可以 动态开辟内存方式创建,要手动调用delete释放内存
Student * stu2 = new Student;
stu2->setName("ss");
stu2->setAge(14);
cout << stu.getName() << ", " << stu2->getAge() << endl;
if(stu2)
{
delete stu2;// 手动释放动态开辟的内存
stu2 = NULL;
}
return 0;
}
输出:
张无忌, 18
张无忌, 14
C++的布尔类型
C语言的非0即true,在C++仍然适用。
同时C++有自己的布尔类型,用bool声明。
字面量true打印为1,false打印为0。
#include <iostream>
using namespace std;
int main(){
bool flag = true;
cout << "flag = " << flag << endl;
cout << false << endl;
if(239847){
cout << "True" << endl;
}
if(!0){
cout << "True" << endl;
}
if(-384.23)
{
cout << "True" << endl;
}
return 0;
}
输出:
flag = 1
0
True
True
True