详解C++编程中类的声明和对象成员的引用
C++类的声明和对象的创建 与结构体一样,类只是一种复杂数据类型的声明,不占用内存空间。而对象是类这种数据类型的一个变量,占用内存空间。 类是用户自定义的类型,如果程序中要用到类,必须先进行声明,或者使用已存在的类(别人写好的类、标准库中的类等),C++语法本身并不提供现成的类的名称、结构和内容。 一个简单的类的定义: class Student{ //成员变量 char *name; int age; float score; //成员函数 void say(){ printf("%s的年龄是 %d,成绩是 %fn",name,age,score); } }; 该例创建了一个Student类,它包含了3个成员变量和1个成员函数。 class是C++中的关键字,用于声明一个类;紧接 class 关键字之后的是我们自定义的类名 Student;由{ }包围的是类体。声明类时不能对成员变量进行初始化,只有在创建对象以后才能赋值。 类可以理解为一种新的数据类型,该数据类型的名称是 Student。与 char、int、float 等基本数据类型不同的是,Student 是一种复杂数据类型,可以包含基本类型,而且多了很多基本类型中没有的特性。 声明了 Student 数据类型之后,就可以用它来定义变量了,如: Student LiLei; //创建对象
int a; //定义整形变量
在定义类的对象时,class 关键字可要可不要。但出于习惯我们通常都会省略掉class关键字,例如: class Student LiLei; //正确 Student LiLei; //同样正确 创建类的对象时,除了能定义单个变量以外,还可以定义一个数组或者指针。例如: Student all_student[100]; Student *pointer;
和结构体(struct)类似,你可以先声明类,然后再创建对象,也可以在声明类的同时创建对象。如下所示: class Student{ //成员变量 char *name; int age; float score; //成员函数 void say(){ printf("%s的年龄是 %d,成绩是 %fn",score); } }stu1,stu2; 这个时候你也可以省略类名,直接创建对象。如下所示: class{ //成员变量 char *name; int age; float score; //成员函数 void say(){ printf("%s的年龄是 %d,成绩是 %fn",stu2; 直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。 一个完整的示例: #include <stdio.h> //类可以在所有函数之外定义 class Student{ public: //类包含的变量 char *name; int age; float score; public: //类包含的函数 void say(){ printf("%s的年龄是 %d,成绩是 %fn",score); } }; int main(){ //创建对象 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(); return 0; } 运行结果: 小明的年龄是 15,成绩是 92.500000 李雷的年龄是 16,成绩是 80.000000
对象指针和结构体指针类似。 注意:对象指针指向的是一个具体的对象,而不是类。下面的写法是错误的: Student *pt; pt = &Student; C++对象成员的引用
通过对象名和成员运算符访问对象中的成员 例如在程序中可以写出以下语句: stud1.num=1001; //假设num已定义为公用的整型数据成员 表示将整数1001赋给对象stud1中的数据成员num。其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。注意不能只写成员名而忽略对象名。 访问对象中成员的一般形式为: stud1.display( ); //正确,调用对象stud1的公用成员函数 display( ); //错误,没有指明是哪一个对象的display函数
stud1.num=10101; //num是私有数据成员,不能被外界引用
前面已经介绍了指向结构体变量的指针(详情请猛击:指向结构体变量的指针),可以通过指针引用结构体中的成员。用指针访问对象中的成员的方法与此类似。如果有以下程序段: class Time { public : //数据成员是公用的 int hour; int minute; }; Time t,*p; //定义对象t和指针变量p p=&t; //使p指向对象t cout<<p->hour; //输出p指向的对象中的成员hour
如果为一个对象定义了一个引用变量,它们是共占同一段存储单元的,实际上它们是同一个对象,只是用不同的名字表示而已。因此完全可以通过引用变量来访问对象中的成员。 如果已声明了Time类,并有以下定义语句: Time t1; //定义对象t1 Time &t2=t1; //定义Time类引用变量t2,并使之初始化为t1 cout<<t2.hour; //输出对象t1中的成员hour
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |