一、引用的应用。
在c++中既能用引用又能用指针的地方尽量用引用。
用引用传递参数的时候,我们时常使用const来修饰,来避免参数被意外的修改。
千万不要返回对局部变量的引用,因为局部变量会随着局部代码执行完成后被销毁,当然静态局部变量和动态分配的局部变量是特例。
二、c++的四种类型转换
1.static_cast<类型>() 静态类型转换,在编译的时候进行,一般在一个方向上可以做隐式类型转换的话,那么在另一个方向上一般做静态类型转换。
如void*到任意类型的转换。
2.dynamic_cast<类型>() 动态类型转换,一般用于子类向父类的转换
3.reinterprect_cast<类型>()重解释类型转换,可用于任意类型之间的转换,除非必要,一般不建议使用。如可以把整数强转为指针,很霸道吧。
4.const_cast<类型>()这就是常说的去常,如一般好多的类中需要重载两个赋值运算符函数,一个const类型的,一个不带const类型的,带const类型的可以用const_cast<this>->m_member = that.m_member.
三、成员函数指针和成员变量指针
成员函数指针的声明方法:函数返回值类型 类名::*p = 对象.成员函数()/该类类型的指针->成员函数()
成员变量指针的声明方法:函数返回值类型 类名::*p = 对象.成员变量/该类类型的指针->成员变量
该类型的成员函数指针可以指向该类中的任意一个成员函数,同理,该类型的成员变量指针也可以指向该类中的任意一个成员变量。成员指针如果用作函数形参具有很好的效果。
使用方法。下面举一个简单的例子,都是汉字太过抽象。
Class A{
int m_a;
int m_b;
void foo1();
void foo2();
};
A a;
A* pa = &a;
int A::*p = a.m_b; 或int A::*p = pa->m_a; //该句定义了一个指向a对象的成员变量m_b的成员变量指针。
p = a.m_b;或p = pa->m_b//该句定义了一个指向a对象的成员变量m_b的成员变量指针。
void A::*p1 = a.foo1();或void A::*p1 = pa->foo1();//该句定义了一个指向a对象的成员函数foo1()的成员函数指针。
p1 = a.foo2();或p1 = pa->foo2();//该句定义了一个指向a对象的成员函数foo2()的成员函数指针。
五、什么是面向对象
万物皆对象
以下为鄙人拙见,如高手视之,请一笑而过。
就以c++为例来说明一下面向对象分析问题的过程
当我们要通过程序来编写一个现实的对象的时候,我们先把许多相同的这种对象抽象成一个类,然后由这个类来派生对象。打个比方,类有点像是一种对象的图纸,当我们需要这种对象的时候就按这个图纸造一个,图纸是不需要耗费材料的,只有当实际制造的时候才会用各种材料。同理类是基本不占内存的(在c++中类占一个字节),只有当我们产生实际的对象的时候才会为对象分配内存,并调用构造函数初始化。
然后不同的类能产生不同的对象,不同的对象相互“交流”,互相合作就构成了我们的程序,就好像时间万物各自分工一样。
六、构造函数
创建实例化对象的时候会调用构造函数
构造函数的初始化步骤:
1)分配内存空间
2)初始化成员变量,如果成员变量为对象则调用该对象的构造函数,总之遇对象则构造。
3)调用构造函数
如果程序员没有在类中显示的写出构造函数,则系统会提供一个默认的无参构造函数,创建对象的时候调用该无参构造函数。
构造函数和普通函数一样可以构成重载。
构造函数没有返回类型 如 A(){} 此即为类A的无参构造函数 A之前切不可加类型修饰符。
相对应的析构函数为 ~A(){}
今天就先写到这里,明天继续。。。
原文链接: https://www.cnblogs.com/fighting-liucl/archive/2013/04/06/3001834.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/83441
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!