C++学习杂记

1.对于内置类型而言,传值比传引用更高效。(effective c++)
2.静态成员函数不可以调用类的非静态成员(成员变量,成员函数), 静态成员函数不含this指针。
3.mutable关键字:在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
4.只有当class 内含有至少一个virtual函数,才会声明virtual 析构函数。
5.标准的STL容器不能被作为基类使用,因为没有virtual 析构函数。

 

P178 
6.非虚函数是静态绑定,指针类型决定调用哪个版本的函数。通过pB 调用非虚函数永远是B所定义的版本,即使pB指向一个B的派生类对象。
虚函数是动态绑定,指向的对象类型决定调用哪个版本的函数。若pB和pD都指向类型为D的对象,不论通过pB和pD调用f,调用的都是D::f

https://www.dotcpp.com/course/67
int  main()
{
        Student A( );
            Student B( );
        return 0;
   }    调用顺序:A 构造->B构造->B析构->A析构
7. 对象A和B的构造函数的调用顺序以及构造函数的调用顺序,完全相反!原因在于A和B对象同属局部对象,也在栈区存储,也遵循“先进后出”的顺序!

8. 友元并不属于这个类本身,无论是友元函数还是友元类。都不能使用类内的this指针,同时也不可以被继承
如果把一个类A声明为另一个类B的友元类,则类A中的所有成员函数都可以访问B类中的成员。使用方法也一样,在类B中进行声明即可。
友元函数可以访问当前类中的所有成员,包括 public、protected、private 属性的。
友元函数不同于类的成员函数,在友元函数中不能直接访问类的成员,必须要借助对象

9. 常对象( const  Clock A;)不可以访问类中的非常成员函数,只能访问常成员函数
常成员函数(const 结尾)只能调用常成员函数,而不能调用非常成员函数,访问但不可以更改非常成员变量

10. 公有继承:基类中的保护成员,在派生类中仍然是保护类型,可以通过派生类的成员函数访问,但派生类对象不可以访问!

11. 虚基类

12.成员变量的初始化顺序与初始化列表中列出的变量的顺序无关,它只与成员变量在类中声明的顺序有关

13.初始化 const 成员变量的唯一方法就是使用初始化列表

14.对象所占用的存储空间的大小等于各成员变量所占用的存储空间的大小之和

15.基类的 private 成员是能够被继承的,并且(成员变量)会占用派生类对象的内存,它只是在派生类中不可见,导致无法使用罢了

16. 如果派生类有同名函数,那么就会遮蔽基类中的所有同名函数,不管它们的参数是否一样。

17.派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。

18.只有派生类的虚函数覆盖基类的虚函数(函数原型相同)才能构成多态(通过基类指针访问派生类函数)。例如基类虚函数的原型为 virtual void func();,派生类虚函数的原型为 virtual void func(int);,那么当基类指针 p 指向派生类对象时,语句 p -> func(100);将会出错(基类指针指向派生类试,不能调用派生类新增的函数),而语句 p -> func();将调用基类的函数。

19. 指针使用CONST
(1)指针本身是常量不可变
char* const pContent;

(2)指针所指向的内容是常量不可变
const char *pContent;

(3)两者都不可变
const char* const pContent;

(4)还有其中区别方法,沿着*号划一条线:
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值