C++的类和对象

  C++在C语言的基础上增加了面向对象编程,C++支持面向对象程序设计。类是C++的核心特性,通常被称为用户定义的类型。

  类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。它们之间的关系是:对象是类的实例,类是对象的模板,他是一个定义包括在特定类型的对象中的方法和变量的软件模板。类是抽象的,不占内存,而对象是具体的,占用存储空间。

  对象是通过new ClassName产生的,用来调用类的方法;类是一种抽象的数据类型。

类的声明:类是一种抽象的数据类型。

class 类名
{
    public:
    公用的数据和成员函数
    protected:
    保护的数据和成员函数
    private:
    私有的数据和成员函数
}  

定义对象的方法:

1.先声明类类型,然后再定义对象
举例:
Student stud1,stud2;     //Student是已经声明的类类型
2.在声明类类型的同时定义对象
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类的对象。 
 
3.不出现类名,直接定义对象
 class//无类名
{
    private://声明以下部分为私有的
    public://声明以下部分为公用的 
}
stud1,stud2;//定义了两个无类名的类对象
  直接定义对象,在C++中是合法的、允许的,但却很少用,也不提倡用。在实际的程序开发中,一般都采用上面3种方法中的第1种方法。在小型程序中或所声明的类只用于本程序时,也可以用第2种方法。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。
 
成员函数:是函数的一种,它也有返回值和函数类型。
它与一般函数的区别只是:
  • 它是属于一个类的成员,出现在类体中。
  • 它可以被指定为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作显式声明。 

 

一个对象所占的空间大小只取决于该对象中数据成员所占的空间,而与成员函数无关。

 虽然调用不同对象的成员函数时都是执行同一段函数代码,但是执行结果一般是不相同的。

不同的对象使用的是同一个函数代码段,C++为此专门设立了一个名为this的指针,用来指向不同的对象。
需要说明:
(1) 不论成员函数在类内定义还是在类外定义,成员函数的代码段都用同一种方式存储。
(2) 不要将成员函数的这种存储方式和inline(内置)函数的概念混淆。
(3) 应当说明: 常说的“某某对象的成员函数”,是从逻辑的角度而言的,而成员函数的存储方式,是从物理的角度而言的,二者是不矛盾的。
 
stud1.num=1001;  //假设num已定义为公用的整型数据成员
  表示将整数1001赋给对象stud1中的数据成员num。其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。
  访问对象中成员的一般形式为 : 对象名.成员名 ,不仅可以在类外引用对象的公用数据成员,还可以调用对象的公用成员函数,但是必须指出对象名。
应该注意所访问的成员是公用的(public )还是私有的(private )。只能访问public成员,而不能访问private成员。在类外只能调用公用的成员函数。在一个类中应当至少有一个公用的成员函数,作为对外的接口,否则就无法对对象进行任何操作。
 
 
posted @ 2019-12-23 15:45  【SmarT】  阅读(410)  评论(0编辑  收藏  举报