C++在C语言的基础上,增加了面向对象编程,C++支持面向对象程序设计。类是C++的核心特性,定义一个类,本质上是定义一个数据类型的蓝图:
可以看见一段代码如下所示:
#include <iostream>
using namespace std;
class Person{
private:
int age, height;
double money;
string books[100];
public:
string name;
void say(){
cout << "I'm" << name << endl;
}
int get_age(){
return age;
}
void add_money(double x){
money+=x;
}
};
int main(){
Person c;
c.name = "XYZ";
//c.age = 18;
cout << c.get_age() << endl;
c.add_money(10000);
return 0;
}
private中的是私有变量,其中的值不能够直接访问,public中的内容是公有的,可以直接进行访问。结构体与类是近似的,但是通常来讲我们会将复杂的数据用类来进行打包,而较为见到的数据用struct来进行打包。
指针指向存放变量值的地址,因此我们可以通过指针来修改变量的值。
一段代码如下所示:
#include <iostream>
using namespace std;
int main(){
//生成一个int类型的变量a,值为10
int a = 10;
//生成一个int类型的指针p;值为a的内存地址
int *p = &a;
//打印a的内存地址和打印p的值来进行比较
cout << &a << endl;
cout << p << endl;
//打印存储在指针p中的值
cout << *p << endl;
//对p所存储的内存地址的值进行修改
*p += 5;
//可以发现a的值会得到修改
cout << *p << endl;
cout << a << endl;
return 0;
}
首先我们生成了一个int类型的变量a,a的值为10;接着我们生成了一个int类型的指针,用来存变量a的内存地址,指针类型要用到符号*,而要访问一个变量的内存地址则需要使用符号&;如果我们对一个指针类型使用*,则能够方位这个指针所存储的内存地址中的值。
这段代码的输出结果如下所示:
0x7fff7032caa4
0x7fff7032caa4
10
15
15
在c++中,数组名是指向数组中第一个元素的常量指针:
#include <iostream>
using namespace std;
int main(){
int arr[4] = {1,2,3,4};
//数组名是指向数组中第一个元素的常量指针
//数组中的第一个元素的地址可以用数组名来进行表示
int *p = arr;
//打印数组的第一个元素的内存地址
cout << &arr << endl;
//打印存储在指针p中的内存地址
cout << p << endl;
//访问数组的第一个元素的内存地址所存储的数据
cout << *arr << endl;
//访问数组的第二个元素的内存地址所存储的数据
cout << *(arr+1) << endl;
return 0;
}
运行的结果为:
0x7fffc15c80f0
0x7fffc15c80f0
1
2
引用被被称之为叫做别名,相当于同一个内存地址的不同的名字:
#include <iostream>
using namespace std;
int main(){
int a = 10;
int& b = a;
cout << a << endl;
cout << b << endl;
cout << &a << endl;
cout << &b << endl;
return 0;
}
运行结果为:
10
10
0x7fff4054c024
0x7fff4054c024
可以发现a和b实际上使用的是同一个内存地址。