C++之类

什么是类:

在C++中类是一种较为特殊的数据结构,它更像是从结构体中演变而来的。通过定义自己的类去定义一种新的数据类型,并且也可以在类中定义成员函数,对你所定义的具体的数据类型进行相应的操作。

类的哲学:

从现实世界中我们可以对具体的事物进行分类。比如:人类—>男人,女人。它更加的抽象,但是有这种面向对象的思想编程也是比较合适的。

类的语法: 

首先,我们要定义一种新的数据类型,才能定义某个具体类型的变量。

定义数据类型时,从访问控制上分类有三类:public,private(缺省时默认),protect三类,从成员类型上分为:数据成员和函数成员,最广泛的划分分为静态成员(属于整个类)和非静态成员(属于某个具体的对象)。public修饰的成员可以通过对象的引用、对象的指针、对象名.成员名来进行访问,static修饰的静态成员也可以通过“::”来操作。private修饰的成员只能在类作用域(成员函数体内和类内)内进行访问,这条是铁律。protected成员暂且不谈。

定义具体的变量时,我们要保证我们所定义的这个类(数据类型)是完整的,只有这样编译器才能知道应该分配多大的内存空间。比如:我们先定义class A,后定义class B,但如果在类中A定义类B的具体对象时就会出现错误。即使使用前向引用声明也只能定义指向类B的指针,而不能得到B的任何细节。

构造函数和析构函数:

在对象初始化时都会调用构造函数,如果你没有定义任何构造函数,则编译器会自动生成一个默认构造函数,如果你定义了任何一种构造函数,那么编译器都不会再定义默认构造函数,此时定义对象时定义了其他构造函数但是没有初始值,那么编译器将会报错。那么构造函数都有哪些类呢?构造函数类型:有参构造函数、默认构造函数、类型转换构造函数、拷贝构造函数(深拷贝、浅拷贝在于是否new)。在初始化对象时将会调用相应的构造函数。相应的,在对象死亡时,析构函数将会被调用,目的是去做些善后的工作,比如说释放动态内存、对static进行操作等。

this指针:

this指针是个好东西。在类的非静态成员函数中有指向当前对象的this指针。例如:int fun( ){ return 0; } 将翻译成  int fun(const void* this){ return this-—>x; }。当a.fun()时,将会 this=&a;而在静态成员函数中没有this指针,因为它属于整个类,而不属于某个具体的对象。

运算符重载:

运算符重载是一个C++的重要功能。我们可以将运算符重载为成员函数、全局函数或友元函数。如果是重载类型转换,则不需要返回值,因为类型转换的时候你已经指明了返回值的类型。

继承派生与复合关系:

A—>B—>C—>D。对D来说,C是直接基类,A、B是间接基类。派生类是通过对基类进行修改(如果同名则进行覆盖)和扩充得到的。派生类定义后将不再依赖于基类,它拥有基类的全部成员函数和成员变量,但是派生类的成员函数不能访问基类的私有成员。在派生类对象中,包含基类对象,而且基类对象的存储位置位于派生类对象新增的成员变量之前。那么派生类的构造函数是怎样的呢?在构造对象时,先自动调用执行基类的构造函数,然后执行派生类的构造函数。析构函数的执行顺序是相反的。派生类的对象从某种程度上也是基类的对象,所以派生类的对象可以赋值给基类对象,派生类对象可以初始化基类引用,派生类对象的地址可以赋值给基类指针。复合关系就是类的组合关系。当然它的拷贝构造函数也是好写的。

虚函数及其实现机制:

有虚函数的类就有一个虚表


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值