C++的类和对象
C++在C语言的基础上增加了面向对象编程,C++支持面向对象程序设计。类是C++的核心特性,通常被称为用户定义的类型。
类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。它们之间的关系是:对象是类的实例,类是对象的模板,他是一个定义包括在特定类型的对象中的方法和变量的软件模板。类是抽象的,不占内存,而对象是具体的,占用存储空间。
对象是通过new ClassName产生的,用来调用类的方法;类是一种抽象的数据类型。
类的声明:类是一种抽象的数据类型。
class 类名 { public: 公用的数据和成员函数 protected: 保护的数据和成员函数 private: 私有的数据和成员函数 }
定义对象的方法:
Student stud1,stud2; //Student是已经声明的类类型
class Student //声明类类型 { public: //先声明公用部分 void display() { cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } private: //后声明私有部分 int num; char name[20]; char sex; } stud1,stud2; //定义了两个Student类的对象 //在定义Student类的同时,定义了两个Student类的对象。
class//无类名 { private://声明以下部分为私有的 public://声明以下部分为公用的 } stud1,stud2;//定义了两个无类名的类对象
- 它是属于一个类的成员,出现在类体中。
- 它可以被指定为private(私有的)、public (公用的)或protected(受保护的)。
- 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。
一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。
class Student {public: void display(); //公用成员函数原型声明 private: int num; string name; char sex; //以上3行是私有数据成员 }; void Student∷display() //在类外定义display类函数 {
cout<<″num:″<<num<<endl; //函数体 cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } Student stud1,stud2; //定义两个类对象
注意:
- 在类体中直接定义函数时,不需要在函数名前面加上类名。
- 成员函数在类外定义时,必须在函数名前面加上类名,予以限定(qualifed),“∷”是作用域限定符(field qualifier)或称作用域运算符,用它声明函数是属于哪个类的。
- 如果在作用域运算符“∷”的前面没有类名,或者函数名前面既无类名又无作用域运算符“∷”,则表示display函数不属于任何类,这个函数不是成员函数,而是全局函数,即非成员函数的一般普通函数。
类函数必须先在类体中作原型声明,然后在类外定义(如果一个函数,其函数体只有2-3行,一般可在声明类时在类体中定义。多于3行的函数,一般在类体内声明,在类外定义。),也就是说类体的位置应在函数定义之前,否则编译时会出错。
inline 函数:为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C++系统会自动将它们作为内置(inline )函数来处理。
C++要求对一般的内置函数要用关键字inline声明,但对类内定义的成员函数,可以省略inline,因为这些成员函数已被隐含地指定为内置函数。
应该注意的是:
如果成员函数不在类体内定义,而在类体外定义,系统并不把它默认为内置(inline )函数,调用这些成员函数的过程和调用一般函数的过程是相同的。如果想将这些成员函数指定为内置函数,应当用inline作显式声明。
一个对象所占的空间大小只取决于该对象中数据成员所占的空间,而与成员函数无关。
虽然调用不同对象的成员函数时都是执行同一段函数代码,但是执行结果一般是不相同的。