2021-01-15 - 2021-01-17

继承
继承方式
不同的继承方式决定了派生类从父类继承成员的访问权限上限。
如public继承的话,访问权限最高,所以基类成员的访问修饰不变。private继承的话从基类继承的成员都变成了private,这样继续派生的派生类就无法访问间接基类的成员了。

派生类构造顺序

  • 构造基类,基类顺序按照继承时基类的顺序
  • 声明类对象的顺序
    所以,构造顺序与构造函数怎么写无关

派生类复制构造函数
因为类型兼容,所以可以将派生类的引用直接传给基类的复制构造函数。

虚基类
class B2:virtual public B1
解决多继承时基类有共同基类的问题
虚基类的构造函数由最远派生类调用

重载运算符

class Point2D
{
public:
    const int& X;
    const int& Y;
    Point2D():x(0),y(0),X(x),Y(y) {};
    Point2D(int _x,int _y) :x(_x), y(_y), X(x), Y(y) {};
    Point2D operator + (const Point2D& _after)
    {
        return Point2D(X + _after.X, Y + _after.Y);
    }

        friend Point2D operator +(const Point2D& p1, const Point2D& p2);

    Point2D operator - (const Point2D& _after)
    {
        return Point2D(X - _after.X, Y - _after.Y);
    }

    Point2D& operator ++()
    {
        x++;
        y++;
        return *this;
    }

    Point2D operator ++(int)
    {
        Point2D old = *this;
        ++* this;
        return old;
    }
private:
    int x;
    int y;
};

Point2D operator +(const Point2D& p1, const Point2D& p2)
{
    return p1 + p2;
}
  • 前置自增(),后置自增(int)
  • 前置返回引用,后置返回自增前的复制(因为复制是局部的,所以不能引用)
  • 函数内重载只能point1+变量,不能变量+point1,这是可以用函数外重载,注意声明时要加friend

虚函数
在编译过程中不确定指向哪个函数,运行时再确定
写在类内的函数是内联函数,编译时就会把它嵌入到类内部,它是静态的。所以为了动态调用派生类的方法,需要写在函数外面

虚表


image.png

对象指向虚表,虚表指向函数

纯虚函数
基类的函数因过于抽象而无法实现,所以没有函数体,virtual func()=0
只要类里面有一个是纯虚函数,就无法实例化,它是抽象类

override
派生类实现基类的虚函数时,编译器根据函数名、参数等确定该函数是虚函数还是普通函数。所以重写虚函数时写错了也会被当普通函数,而不会报错,难以发现问题。
使用override可以显式覆盖,若基类没有相同虚函数时会报错

输入/输出
宽度:

  • cout.width(10);
  • cout<<setw(10)<<value;
    对齐方式
    cout<<setiosflags(ios_base::left)<<setw(10)<<value;
    取消对齐
    cout<<resetiosflags(ios_base::left);
    setiosflags
    setiosflags中有许多参数,可以控制输出的格式
    设置精度
    cout<<setiosflags(ios_base::fixed)<<setprecision(2);//保留小数点后面的2位有效数字(fixed或scientific)
    cout<<setprecision(2);//保留2位有效数字
    fixed与scientific
    fixed是正常的数字,scientific是科学计数法

二进制保存数据
ofstream file("filename",ios::binary);
file.write((char*)value,sizeof(value));
file.close();

  • binary
  • write(char* start,int length);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针数组数组的元素是指针类型Point *pa[2];指针数组与二维数组的差别指针数组的元素在内存中不一定连续,二...
    Jaymz_2b11阅读 512评论 0 0
  • 技术交流QQ群:1027579432,欢迎你的加入! 一.static关键字的作用 1.静态成员的特点 1.sta...
    CurryCoder阅读 2,935评论 3 3
  • 什么是多态 多态是 C++ 编程时的一种特性,多态性即是对一个接口的多种实现,多态可以分为 静态多态和动态多态,所...
    雪上霜阅读 196评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,573评论 16 22
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,613评论 0 11