【24.1.2-1.3】C++ Primer自学 Day4-5

        中间元旦划水了一段时间hh

二、C++浏览

3、基于对象的设计

        信息隐藏一般不会带来额外的负担【C++提供了内联函数机制:在调用点被展开】,C++中类内的函数都是内联【隐式】。

        关于内联函数详细内容,可以参考大佬的博客:【C++】 内联函数详解(搞清内联的本质及用法)_c++内联函数-CSDN博客

       【个人理解:我们在调用函数时,有一个传参的过程,CPU必须要中断主程序的运行,先把实参、局部变量、地址压入栈中再执行调用函数的函数体的内容,结束调用时也要进行类似的操作,会消耗时间,内联函数的作用就是把函数体直接在主函数内展开,相当于把调用的函数体写到了主函数内,节省了传参这些时间。】

        C++类的初始化【构造函数:函数名和类名相同】:构造函数专门用来初始化类,可以用【函数重载:参数表必须不同,函数名称相同】的方式自定义多种初始化的方式。

        缺省构造函数:默认,不传参。

        在类外定义类的成员函数:

IntArray:: 
IntArray( int sz ) 
{ 
 // 设置数据成员
 size = sz; 
 ia = new int[ _size ]; 
 
 // 初始化内存
 for ( int ix=0; ix < _size; ++ix ) 
 ia[ ix ] = 0; 
}

        使用了域操作符::【告诉编译器,在哪里定义】

        如果类在构造的时候很多初始化用了相同或者相似的代码,可以新建一个函数来完成这个工作,只要在构造函数里调用就行。

        类的析构函数:~加上类名,也可以重载。作用是删除构造时分配的内存。

        操作符重载【重新定义操作符的内容】。

Q1+Q2:C++ 类的关键特征是接口与实现的分离,接口是一些用户可以应用到类对象上的操作的集合。它由三部分构成:这些操作的名字、它们的返回值、以及它们的参数表。一般地,这些就是该类用户所需要知道的全部内容。私有实现包括为支持公有接口所必需的算法和数据 。理想情况下,即使类的接口增长了,它也不用变得与以前的版本不相兼容。另一方面,在类的生命周期内其实现可以自由演化。从下面选择一个类,并为该类编写一个公共接口。
                                (a) Matrix (c) Person (e) Pointer
                                (b) Boolean (d) Date (f) Point
Class Person{
    public:
 //
    
    private:
 //
    void iniP(int size,str *name);
    char *_name;
    int _sz;
};

void Person::iniP(int size,str *name){
    _sz = size;
    _name = new char[_sz];
    for(int ix = 0;ix<_sz;ix++){
    if(!name) _name[ix]=' ';
    else _name[ix] = name[ix];
}
}
Person::Person(int size,str *name){iniP(size,name);}

        需要析构函数,因为使用了动态内存,需要释放。

4、面向对象的设计

        类的继承【针对使用场景的变化,在基本功能上面增加专项的功能以应对变化】。

        被继承的类叫做【基类】,从基类派生的类叫做【派生类】或者【子类】。

        【个人理解】C++中的虚拟函数机制:【通过虚函数表实现】:C++实现虚函数的方式,就是在创建类的时候,会创建隐藏的类成员,每个隐藏成员会保存一个指向虚函数表的指针,指针指向了函数的地址,如果在继承时,没有重载父类的函数,那么这个指针指向的是父类函数的地址,如果重写了父类的函数,那么指向的是本类重写函数的地址,在表上原本记载了父类函数地址的位置被重写成子类的地址。如果继承了多个类,相当于虚函数表是个二维数组。

        【基类设计中的两个思考点】1、C++的protected访问级别:只允许给派生类用,不提供给一般的程序。2、Virtual标记:【看派生类是不是要用不同的操作、类型】

        

  • 33
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值