- const修饰符
const修饰符,很容易就会弄混,所以在这里简单的说明。const与#define有着异曲同工之处,首先,他们都是可以定义某个常量,并且只可以读取,而不能改变数据。相当于在石头上刻字,之后不能用笔去改正内容;但是它们也有不同的地方,const可以有自己的数据类型,它有着更好的代码优化。对于我来说,最难的一点就是const与指针一起使用。归纳一下有着三种情况:指向常量的指针,常指针,指向常量的指针。
(1)指向常量的指针
const char * pc=“abcd”;像这种情况就不能改变所指的常量,但是可以改变指针本身的值,就是说可以另外给pc指针赋其他的值。
(2)常指针
是指指针本身的,如char* const pc=“abcd”;这里的指针是固定的,但是pc的数据可以改变,就是说pc是const,所指的数据不是。
(3)指向常量的常指针
const char* const pc=“abcd”;这里是声明了一个叫pc的指针变量,指针和常量都是const,都不可以改变。也可以看作是前面两个的结合。
总结一点就是看const与指针的距离。
2.派生类的构造函数的继承规则
先祖先,在客人,再自己。简单点说就是先调用所对应的基类,然后是其他的派生类,最后才是自己的类;如果有虚基类就先调用。
3.函数名要加上()
4.虚函数的调用
举个例子:
#include
using namespace std;
class A{
public:
virtual void fa(void)
{cout<<“A::fa”<<endl;}
void fb(void)
{ cout<<“A::fb”<<endl;}
};
class B:public A{
public:
void fa(void)//这就失去了虚特性,变成了一般的重载函数
{cout<<“B::fa”<<endl;}
void fb(void)
{cout<<“B::fb”<<endl;}
};
void main()
{
Apa=new A;
Apb=new B;
pa->fa();
pb->fb();
pb->fa();//这里是重载函数的调用,但是fa已经变为了一般的重载函数了。
pb->A::fa();
((B*)pb)->fb();
}