详解C++编程中类的声明和对象成员的引用
C类的声明和对象的创建类是创建对象的模板一个类可以创建多个对象每个对象都是类类型的一个变量创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例Instance拥有类的成员变量和成员函数。与结构体一样类只是一种复杂数据类型的声明不占用内存空间。而对象是类这种数据类型的一个变量占用内存空间。类的声明类是用户自定义的类型如果程序中要用到类必须先进行声明或者使用已存在的类别人写好的类、标准库中的类等C语法本身并不提供现成的类的名称、结构和内容。一个简单的类的定义12345678910classStudent{//成员变量char*name;intage;floatscore;//成员函数voidsay(){printf(%s的年龄是 %d成绩是 %f\n, name, age, score);}};该例创建了一个Student类它包含了3个成员变量和1个成员函数。class是C中的关键字用于声明一个类紧接 class 关键字之后的是我们自定义的类名 Student由{ }包围的是类体。声明类时不能对成员变量进行初始化只有在创建对象以后才能赋值。类可以理解为一种新的数据类型该数据类型的名称是 Student。与 char、int、float 等基本数据类型不同的是Student 是一种复杂数据类型可以包含基本类型而且多了很多基本类型中没有的特性。需要注意的是在类声明的最后有一个分号(;)它是类声明的一部分表示类声明结束了不能省略。创建对象声明了 Student 数据类型之后就可以用它来定义变量了如1Student LiLei;//创建对象该语句声明了一个名字为 LiLei、数据类型为 Student 的变量。这和1inta;//定义整形变量语句定义了一个整型变量表达的意思是类似的。而 LiLei 这个变量我们称之为 Student 类的对象。在定义类的对象时class 关键字可要可不要。但出于习惯我们通常都会省略掉class关键字例如12classStudent LiLei;//正确Student LiLei;//同样正确创建类的对象时除了能定义单个变量以外还可以定义一个数组或者指针。例如12Student all_student[100];Student *pointer;第一条语句定义了一个 all_student 数组该数据拥有100个元素每个元素都是 Student 类型。第二条语句定义了一个 Student 类型的指针 pointer该指针可以指向 Student 类型的变量对象用法和普通指针一样。声明类的同时创建对象和结构体struct类似你可以先声明类然后再创建对象也可以在声明类的同时创建对象。如下所示12345678910classStudent{//成员变量char*name;intage;floatscore;//成员函数voidsay(){printf(%s的年龄是 %d成绩是 %f\n, name, age, score);}}stu1, stu2;这个时候你也可以省略类名直接创建对象。如下所示12345678910class{//成员变量char*name;intage;floatscore;//成员函数voidsay(){printf(%s的年龄是 %d成绩是 %f\n, name, age, score);}}stu1, stu2;直接定义对象在C中是合法的、允许的但却很少用也不提倡用。一个完整的示例123456789101112131415161718192021222324252627#include stdio.h//类可以在所有函数之外定义classStudent{public://类包含的变量char*name;intage;floatscore;public://类包含的函数voidsay(){printf(%s的年龄是 %d成绩是 %f\n, name, age, score);}};intmain(){//创建对象Student stu;stu.name 小明;stu.age 15;stu.score 92.5f;stu.say();//定义指针Student *pt_stu stu;pt_stu-name 李雷;pt_stu-age 16;pt_stu-score 80;pt_stu-say();return0;}运行结果12小明的年龄是 15成绩是 92.500000李雷的年龄是 16成绩是 80.000000public 是C中的关键字用来修饰成员变量和成员函数表示它们是公有的。我们将在下节详细讲解 public这里只需要知道只有 public 后面的成员变量和成员函数才能被创建的对象访问到。像本节开头的例子没有使用 public那么创建对象后就不能使用任何成员。main 函数中首先创建了一个对象 stu然后又定义了一个 Student 类型的指针变量。可以发现和结构体struct类似一个对象通过成员选择符”.“来访问成员变量和成员函数而指针变量通过指针操作符”-“来访问成员。对象指针和结构体指针类似。注意对象指针指向的是一个具体的对象而不是类。下面的写法是错误的12Student *pt;pt Student;C对象成员的引用在程序中经常需要访问对象中的成员。访问对象中的成员可以有3种方法通过对象名和成员运算符访问对象中的成员通过指向对象的指针访问对象中的成员通过对象的引用变量访问对象中的成员。通过对象名和成员运算符访问对象中的成员例如在程序中可以写出以下语句1stud1.num1001;//假设num已定义为公用的整型数据成员表示将整数1001赋给对象stud1中的数据成员num。其中“.”是成员运算符用来对成员进行限定指明所访问的是哪一个对象中的成员。注意不能只写成员名而忽略对象名。访问对象中成员的一般形式为对象名.成员名不仅可以在类外引用对象的公用数据成员而且还可以调用对象的公用成员函数但同样必须指出对象名如12stud1.display( );//正确调用对象stud1的公用成员函数display( );//错误没有指明是哪一个对象的display函数由于没有指明对象名编译时把display作为普通函数处理。应该注意所访问的成员是公用的(public )还是私有的(private )只能访问public成员而不能访问private成员。如果已定义num为私有数据成员下面的语句是错误的1stud1.num10101;//num是私有数据成员不能被外界引用在类外只能调用公用的成员函数。在一个类中应当至少有一个公用的成员函数作为对外的接口否则就无法对对象进行任何操作。通过指向对象的指针访问对象中的成员