C++ 中的类可以看作是结构体(Struct)的升级,类的成员不但可以是变量,还可以是函数。
在C++中,可以用struct和class定义类,都可以继承。区别在于:struct 的默认继承权限和默认访问权限是public,而class的默认继承权限和默认访问权限是private。
class Student{ public: // 内联 void say(){ cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<endl; } private: string name; int age; float score; };
class 关键字定义类。Student 是类的名称,类名的首字母一般大写,以和其他的标识符区分开。{ }内部是类所包含的成员变量和成员函数,由{ }包围起来的部分有时也称为类体,和函数体的概念类似。public 表示类的成员变量或成员函数具有“公开”的访问权限,private 表示具有“私有”的访问权限。
类只是一个模板(Template),编译后不占用内存空间,所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据。只有在创建对象以后才会给成员变量分配内存,这个时候就可以赋值了。
两种创建对象的方式:一种是在栈上创建,形式和定义普通变量类似;另外一种是在堆上使用
new 关键字创建,必须要用一个指针指向它,需要 delete 掉不再使用的对象。
class Student { // ... } Student zhangSan; // 创建对象
使用 new 关键字在堆上创建对象
Student *pStu = new Student;
在栈上创建出来的对象都有一个名字,比如 stu,使用指针指向它不是必须的。但是通过new 创建出来的对象就不一样了,它在堆上分配内存,没有名字,只能得到一个指向它的指针,所以必须使用一个指针变量来接收这个指针,否则以后再也无法找到这个对象了,更没有办法使用它。
也就是说,使用 new 在堆上创建出来的对象是匿名的,没法直接使用,必须要用一个指针指向它,再借助指针来访问它的成员变量或成员函数。
栈内存是程序自动管理的,不能使用 delete 删除在栈上创建的对象;堆内存由程序员管理,对象使用完毕后可以通过 delete 删除。
有了对象指针后,可以通过箭头->来访问对象的成员变量和成员函数,这和通过结构体指针来访问它的成员类似。
pStu -> name = "小明"; pStu -> age = 15; pStu -> score = 92.5f; pStu -> say();
通过对象名字访问成员使用点号.,通过对象指针访问成员使用箭头->,这和结构体非常类似。