C++进阶—>易错知识点随笔

static 静态变量和静态成员函数:

1)静态变量和静态函数是属于整个类的而不是某个对象,其只存储一份地址供所有对象共用;

2)使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存;

3)静态成员函数不能调用非静态成员变量和非静态成员函数,因为静态成员函数属于整个类,在类实例化对象之前就已经分配空间了,而类的非静态成员必须在类实例化对象后才有内存空间,就好比没有声明一个变量却提前使用它一样;

4)非静态成员函数可以调用静态成员变量和函数;

5)静态成员变量在使用前必须初始化,且在类外初始化(类型名 类名::静态变量名=实值),静态成员变量不能在构造函数中初始化(我的程序是这样的 编译没有错误 但是运行出错);

6)静态成员变量能被任何类对象所修改;

7)静态常量(static const)在类中定义时就必须初始化,且不能被任何类对象所修改。


friend 友元函数:

1)友元函数在类中定义,但不是类的成员函数(包括重载函数),友元函数可以在类内部实现也可在外部实现,在外部实现不需要加类的作用符;

如:

class a

{

        friend void aaa();

}

void aaa()

{cout<<"aaa"<<endl;}

2)因为友元函数可以访问类的私有变量,所以友元函数在一定程度上破坏了类的封装性和隐藏性;

3)关键字friend在实现运算符重载时,一般用于左移(<<)和右移(>>)操作,不用于其它操作符的重载使用,否则报错;

4)友元函数不能实现重载。


析构函数:

1)析构函数为系统在相应程序或对象执行完毕后,自动执行的一种释放资源的函数,不能具有参数;

2)严格讲析构函数在编译器编译的时候会分配一个this指针,也就意味着可以赋予参数,但由于其是系统自动调用执行的函数,赋予参数的话无法为其传递实参而且造成编译器错误 故析构函数不能含参数。


重载、重写、重定义:

1)函数重载

必须在同一个类中;

子类无法重载父类的函数,父类同名函数将被名称覆盖;

重载是在编译期间根据参数类型和个数决定函数调用。

2)函数重写

必须发生在子类和父类之间;

并且子类与父类中的函数必须有完全相同的原型;

使用virtual声明之后的函数在子类中为重写,能够产生多态(不使用virtual声明的函数,为重定义);

多态是在运行期间根据具体对象的类型决定函数调用。

注意:子类中存在与父类名称相同的函数,那么覆盖父类函数名,要么重写(重写条件是函数名和函数参数与父类相同),如父类有parent(int a)子类有parent(int a, int b)无论是否存在virtual关键字都将覆盖父类函数名(即子类对象在调用parent函数时只在子类中寻找,不在父类中寻找,若执行父类parent函数 使用作用符 如a.parent::parent(int a))。


继承:

1)子类(public 或 protected 继承)可以访问父类的成员函数和变量(不能访问父类的私有成员),若子类使用private继承父类,则不能访问父类任何成员;

2)继承的析构顺序与构造函数的调用顺序正好相反,先析构自己的,再析构父类的;


继承中构造函数调用顺序:

1)如果继承虚基类,先调用虚基类的构造函数,如果有多个虚基类,按顺序调用。
2)如果继承基类,调用基类的构造函数;如果有多个基类,按顺序调用。
3)如果类中定义了成员对象,调用成员对象的构造函数;如果有多个成员对象,则按成员对象定义的顺序调用;
4)调用自身的构造函数




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值