C++ 常用基础概念

C++ 常用基础概念


this 指针
  1. 每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。
  2. this指针的类型取决于使用this指针的成员函数类型以及对象类型。
  3. this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。
  4. this只能在成员函数中使用。全局函数,静态函数都不能使用this。
内存分配
  1. 编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量;栈存储调用函数相关的变量、地址等;堆存储动态生成的变量。
  2. 在c中由malloc,free库函数产生以及释放存储空间,在c++中由new和delete运算符产生以及释放存储空间。
创建对象

在C++中,只要有两种方法来创建对象:

方法一:
ClassName object(param);
这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。
注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。
这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数。该方法创建的对象调用类方法时,必须用“.”,而不能用“->”。

方法二:
ClassName *object=newClassName(param);
delete object;
这种方法跟Java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。而且,用new动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。
注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;

多态

1.函数的入口地址与函数名是在编译时进行绑定的,我们称之为编译期绑定,而多态的功能则是将函数名动态绑定到函数入口地址,这样的动态绑定过程称为运行期绑定,换句话来说就是函数名与函数入口地址在程序编译时无法绑定到一起,只有等运行的时候才确定函数名与哪一个函数入口绑定到一起。

2.编译器绑定是指在程序编译时就将函数名与函数入口地址绑定在一起,运行期绑定是指在程序运行时才将函数名与函数入口地址绑定到一起,而在运行期绑定的函数我们称其是“多态”的。

3.要想形成多态必须存在以下关系:
* 必须存在继承关系;
* 继承关系中必须有同名的虚函数;
* 存在基类类型的指针和引用,通过该指针和引用调用虚函数;

virtual 关键字

1.virtual关键字仅用于函数声明;
2.在c++只有类中的成员函数能被申明为虚函数,而对于顶层函数则不能申明为虚函数;
原因:声明函数是为了构成多态,而构成多态的第一个条件就是需要继承关系,顶层函数很明显是不具备继承关系的,,因此也就不能被声明为虚函数了。

C++ 重载

函数重载是指两个函数具有相同的函数名,但函数的参数类型以及参数个数不同。函数重载多发生在顶层函数或者同一个类中,函数重载不需要构成继承关系。

注意:函数重载是编译期绑定的,所以他不具备多态特性。

纯虚成员函数

纯虚成员函数的声明语法如下:
virtual 函数返回类型 函数名(函数参数)=0
纯虚成员函数没有函数体,只有函数声明,在纯虚函数声明结尾加上“=0”表明此函数为纯虚成员函数。
注意:纯虚成员函数可以被派生类继承。

抽象基类

包含纯虚成员函数的类即为抽象基类,之所以说他抽象,那是因为无法实例化,也即无法用于创建对象。
注意:抽象基类用于实现公共接口,在抽象基类中声明的纯虚成员函数,派生类如果想要能够创建对象,则必须全部重新定义这些纯虚成员函数。

dynamic_cast操作符

原因:在C++中,编译期的类型转换有可能会在运行时出现错误,特别是涉及到类对象的指针或引用操作时,更容易产生错误。
功能:可用于在运行期对可能产生问题的类型转换进行测试。

typeid操作符

功能:typeid操作符用于判断表达式的类型。
注意:它和sizeof一样是一个操作符而不是函数,如果使用typeid操作符,最好加上typeinfo头文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值