“Accelerated C++” 阅读笔记(四)

  • explicit关键字。这个关键字只在带有一个参数的构造函数的定义中有意义。当我们说一个构造函数是explicit,意思是,只有在用户明确地调用这个构造函数的地方,编译器才能使用这个构造函数。
    Vec<int> vi(100); //ok
    Vec<int> vi = 100; //error
  • 操作符重载函数的关键字为operater,比如重载[]时
    T& operator[] (size_type i){return data[i]);
  • 可以在子类中使用与父类同命的成员函数,如果要使用父类的成员函数,要加父类的限定符
    double Grad::grade() const
    {
    	return (Core::grade(), thesis);
    }
  • 一个派生类的初始化过程
    1. 为整个对象分配空间(包括基类成员和派生类成员你)
    2. 调用基类的构造函数来初始化对象中的基类部分
    3. 使用构造函数初始化列表初始化派生类的成员
    4. 如果派生类的构造函数的函数体中有语句,就执行这些语句
  • 派生类对象是如何构造的,执行Grad g;会使系统分配足够的空间来保存Grad的5个数据元素,再执行Core的默认构造函数来初始化g的Core部分的数据元素,然后执行Grad的默认构造函数。
  • 系统会通过查看引用c1和c2实际绑定的类型,来确定执行哪个类的grade函数。也就是说,系统会通过检查作为参数传递给compare_grades函数的每个对象,来事确定执行哪个类的grade函数。
  • 虚函数只能用在类定义中
  • 动态绑定是在运行时绑定,相反,静态绑定发生在编译时期。如果我们用一个对象来调用一个虚函数,这个调用就是静态绑定的,因为除了编译时期,对象的类型不可能在执行的过程中发生变化。相反如果通过一个指针或者引用来调用一个虚函数,这个函数就是动态绑定的。
  • OOP的核心概念就是多态:一个类型可以代表多种类型。C++是通过虚函数的动态绑定来实现多态调用。引用和指针的类型是确定的,但是它们引用或指向的对象的类型可以是引用或指针的类型,也可以是从它们本身的类型继承而来的任何类型。
  • 虚函数是必须定义的,不管程序是否调用它们。
  • 在指针上调用一个delete时,会发生两件事:1)对象的析构函数会被调用;2)包含这个对象的空间会被释放
  • 在用基类的指针来销毁派生类的对象时,就需要虚析构函数sa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值