C++类初识-有了对象之后

论坛 期权论坛 期权     
编程珠玑   2019-7-29 08:48   2594   0
来源:公众号【编程珠玑】
作者:守望先生
博客:https://www.yanbinghu.com
[h1]前言[/h1]无论是在Java还是Python中,都有类的概念,类的基本思想是数据抽象和封装,一个类定义了一种数据类型以及相关的操作。C++中类是怎样的呢?本文将结合C语言,来介绍C++中的类。
[h1]乐一乐[/h1]问:C++的书为什么比C厚那么多?答:有了对象后就是麻烦。
虽然这只是调侃,但不得不承认,C++在语法特性上要比C复杂,因此本文也只是挑选类的部分内容来阐述。
另外一提,面向对象本身是一种编程思想,只是C++在语言特性层面就支持面向对象,而C并不支持。
[h1]定义类[/h1]与C语言中定义结构体类似,只不过C++的类中,除了有数据,还有相关操作,例如:
  1. struct Human{    unsigned int age;    string name;    double height;    /*定义getAge函数,内部用到了age变量*/    unsigned int getAge()    {        return age;    }};
复制代码
从上面可以看到,除了多了getAge成员函数,其他部分和C语言中的结构体是没有太大的差别的。但是需要注意的是,编译器在处理类的时候,先编译成员的声明,然后才会轮到成员函数。也就是说,即便getAge函数在age的声明之前,也是可以编译过的。
  1. struct Human{    /*定义getAge函数,内部用到了age变量*/    unsigned int getAge()    {        return age;    }    unsigned int age;    string name;    double height;};
复制代码
上面的代码中,虽然age的声明再getAge函数之后,但是不影响编译。
[h1]声明类[/h1]以下几种方式都可以用来声明类:
  1. Human human;struct Human human1;//这种形式和C语言中非常像
复制代码
不过下面这种方式是不行的奥:
  1. Human human();
复制代码
因为这会被认为是函数的声明,因此编译会报错。从后面可以看到,
[h1]类的作用域[/h1]类本身就是一个作用域,所以我们可以看到,在getAge函数中,可以直接访问age成员。而成员函数也可以定义在类的外部,但是为了说明这个成员函数是类的成员,就必须使用作用域符,例如在类的外部定义getAge:
  1. unsigned int Human::getAge(){    return age;}
复制代码
当然前提是在类中已有声明:
  1. unsigned int getAge();
复制代码
通常来说,成员函数实现可能比较复杂,因此常常会在类中声明成员函数,但是在类的外部定义,以便阅读和组织代码。
[h1]构造函数[/h1]无论在C语言中还是在C++中,对于临时变量(或者说非静态,全局变量)声明之后最好进行初始化。对于普通数据类型,如int,double等都可以直接初始化为0,那么类中的数据是复杂的,我们必须有一个或几个函数用来实现类对象的初始化,类中这样的一个或几个函数就是构造函数。对于构造函数需要关注以下几点:
  • 构造函数没有返回值
  • 构造函数名与类名相同
  • 构造函数可以重载
  • 构造函数不能被声明成const
  • 如果没有定义任何构造函数,编译器会为我们提供没有参数的默认构造函数
看下面的代码:
[code]//来源:公众号【编程珠玑】//网站:https://www.yanbinghu.com#include using namespace std;struct Human{    unsigned int age;    string name;    double height;    unsigned int getAge()    {        return age;    }};int main(){    Human human;//这里会去调用默认构造函数    cout
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP