首先这篇文章为自己看到某些帖子后的一些心得和总结,人常说好记性不如烂笔头,所以,还是要做做笔记。
父类引用指向子类对象
内部类:虽然嵌套类在外围类内部定义,但它是一个独立的类,基本上与外围类不相关。它的成员不属于外围类,同样,外围类的成员也不属于该嵌套类。嵌套类的出现只是 告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具 有的标号访问控制。
1.extern和static的区别
(1)修饰局部变量
一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静 态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变 化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。
对于静态局部变量如果没有进行初始化的话,对于×××变量系统会自动对其赋值为0,对于字符数组,会自动赋值为'\0'.
(2)修饰全局变量
对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)。
如:
- //有file1.c
- int a=1;
- file2.c
- #include<stdio.h>
- extern int a;
- int main(void)
- {
- printf("%d\",a);
- return 0;
- }
则执行结果为 1
但是如果在file1.c中把int a=1改为static int a=1;
那么在file2.c是无法访问到变量a的。原因在于用static对全局变量进行修饰改变了其作用域的范围,由原来的整个工程可见变为本源文件可见。
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
2.关于声明和定义
其实关于这二个词的主要区别应该就是:是否分配存储空间。
变量和对象不加extern永远是定义,类中的除外.函数只有函数头是声明,有函数体是定义.
class A;叫声明
class A{....};叫定义
类成员函数的函数体是定义.
class C
{
static int x;//这里的x是声明
static const int a;;//这里的a是声明
//非static变量在类定义对象时才分配内存.
C();//这里的函数是声明
};
int C::x;//这个才是定义
const int C::a=11;//这个才是定义
3.双冒号
C++里的,是“域操作符”。 比如声明了一个类A,类A里声明了一个成员函数void f(), 但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f()函数是类A的成员函数。
::一般还有一种用法,就是直接用在全局函数前,表示是全局函数。 比如在VC里,你可以在调用API 函数里,在API函数名前加::
4.