1.类的定义
class Student
{
public :
//成员变量
char *name;
int age;
float score;
//成员函数
void say()
{
cout<<name<<"的年龄是"<<age<<"的分数为"<<"score"<<endl;
}
};//注意分号不要忘了写
class 是c++关键字,用来定义类,Student 是类的名称,{ }
内部是类所包含的成员变量和成员函数,public
也是 C++ 的新增关键字,它只能用在类的定义中,表示类的成员变量或成员函数具有“公开”的访问权限,类可以理解为一种新的数据类型,该数据类型的名称是 Student。与 char、int、float 等基本数据类型不同的是,Student 是一种复杂数据类型,可以包含基本类型,而且还有很多基本类型中没有的特性。
2.创建对象
有了 Student 类后,就可以通过它来创建对象了,例如:
Student liLei; //创建对象
Student
是类名,
liLei
是对象名。这和使用基本类型定义变量的形式类似:
int a; //定义整型变量
从这个角度考虑,我们可以把 Student 看做一种新的数据类型,把 liLei 看做一个变量。
在创建对象时,class 关键字可要可不要,但是出于习惯我们通常会省略掉 class 关键字,例如:
class Student LiLei; //正确
Student LiLei; //同样正确
除了创建单个对象,还可以创建对象数组:
Student allStu[100];
该语句创建了一个 allStu 数组,它拥有100个元素,每个元素都是 Student 类型的对象。
3.访问类的成员
创建对象以后,可以使用点号.
来访问成员变量和成员函数,这和通过结构体变量来访问它的成员类似。
例子1:
#include <iostream>
using namespace std;
//类通常定义在函数外面
class Student
{
public:
char *name;
int age;
float score;
void say()
{
cout<<"name"<<"的年龄是"<<"age"<<"的分数是"<<"score"<<endl;
}
}
//主函数
int main()
{
Student stu;
stu.name="小军"
stu.age=20;
stu.score=90;
stu.say();
return 0;
}:
3.使用对象指针
C语言中经典的指针在 C++ 中仍然广泛使用,尤其是指向对象的指针,没有它就不能实现某些功能。
上面代码中创建的对象 stu 在栈上分配内存,需要使用&
获取它的地址,例如:
Student stu;
Student *pStu = &stu;
pStu 是一个指针,它指向 Student 类型的数据,也就是通过 Student 创建出来的对象。
当然,你也可以在堆上创建对象,这个时候就需要使用前面讲到的
new
关键字,例如:
Student *pStu = new Student;
在栈上创建出来的对象都有一个名字,比如 stu,使用指针指向它不是必须的。但是通过 new 创建出来的对象就不一样了,它在堆上分配内存,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象了,更没有办法使用它。
也就是说,使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。
栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除。在实际开发中,new 和 delete 往往成对出现,以保证及时删除不再使用的对象,防止无用内存堆积。
例子2:
#include <iostream>
using namespace std;
class Student{
public:
char *name;
int age;
float score;
void say(){
cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl;
}
};
int main(){
Student *pStu = new Student;
pStu -> name = "小明";
pStu -> age = 15;
pStu -> score = 92.5f;
pStu -> say();
delete pStu; //删除对象
return 0;
}
C++动态分配内存 new
C++释放内存 deleteint *p = new int;
delete p;
如果是分配一组连续的数据,则需要使用new[] 例如
int *p = new int[10]; //分配10个int型的内存空间
delete[] p; Student *pStu = new Student;//创建对象指针
delete pStu;
new分配的内存需要delete释放 new[]分配的内存需要delete[]释放,两者之间,一一对应。
4。引用
引用就是别名,对别名的操作就是对原名的操作
int &rnum = num;
rnum是整形变量num的别名,对rnum的操作就是对num 的操作。
例子:
#include <iostream>
using namespace std;
int main(void)
{
int a;
int &b=a;
a=200;
cout<<"b="<<b<<endl;
b=0;
cout<<"a="<<a<<endl;
}
结果为 200,a=0.