class node
{
public:
node(){cout<<"constructor node()"<
~node(){cout<<"destructor ~node()"<
};
class nn
{
public:
node x;
nn(){cout<<"con nn()"<
~nn(){cout<<"des ~nn()"<
};
int main()
{
nn a;
return 0;
}
几年前的一份C++笔记。
看完了Bruce Eckel的Thing in C++(Volume 1),实践比较少,感觉还是半懂不懂,马上就要【面向对象程序设计】的考试了。考的是C++的东西,做了几份C++的卷子,感觉好多细节的东西还是很不确定,不敢下手。于是今天把老师的课件翻了出来,整理了一下,做了个小结。虽然感觉很乱,但是对于我自己来说,还是能看懂,很多东西都很显而易见的也写了,无论怎样,只是为了考试^_^
--------------------------------------------------------------------------------
extern int xx 这是一个声明,而不是定义
--------------------------------------------------------------------------------
在class temp中只定义一个static int b;
1 sizeof(temp) = 1;
这是为什么?
static 变量是这个类共享的,变量是放在全局变量区,不是堆栈里,因此sizeof出来不算在这个static int的大小;是这样的吗??
--------------------------------------------------------------------------------
枚举类型的变量只能进行赋值运算
--------------------------------------------------------------------------------
指针int *p,后不能直接进行*p = 12这样的赋值,因为指针p没有申请内存
--------------------------------------------------------------------------------
如何解释以下程序?
1 int main()
2 {
3 int *a;
4
5 a = (int *)"string";
6 cout<<*a<
7 cout<
8 return 0;
9 }
a指向一个string常量的,强制转换为int *,因此a还是"string"常量的首地址,*a应该是取前面几位的值
--------------------------------------------------------------------------------
析构函数的调用不一定要大括号
如
class node
{
public:
node(){cout<<"node()"<
~node(){cout<<"~node()"<
};
int main()
{
if(1)
node n;
cout<<"out of if"<
return 0;
}
输出为
node()
~node()
out of if
另外,一个大括号就是一个scope,不管有没有if,while等语句
--------------------------------------------------------------------------------
if(!cin)
相当于if(cin.fail())
!的运算符在这里被重载了
--------------------------------------------------------------------------------
函数中的static变量在结束main()的时候才释放,但是在全局变量之前
--------------------------------------------------------------------------------
全局变量区:全局变量,静态全局变量,静态本地变量
stack:本地变量
heap:申请的变量,例如,new,malloc
要注意的是new和malloc不能混用
--------------------------------------------------------------------------------
class 中的public表示所有的object都能访问
private只能让类声明的函数和friend函数访问
protected可以子类访问,也可以被friend函数访问
--------------------------------------------------------------------------------
无论是数组还是指针,传到函数中都变为指针
--------------------------------------------------------------------------------
只有在没有构造函数的情况下,编译器才自动分配一个构造函数,否则,只要
编译器看到一个构造函数,就不会生成一个构造函数。
另外,编译器自动生成的构造函数是没有参数的。
--------------------------------------------------------------------------------
根据函数的参数的个数或者类型的不同可以重载函数。
如果只是返回值不同,则不能重载。
--------------------------------------------------------------------------------
缺省参数的函数。缺省值只能从后往前写。
也就是说int f(int i , int j = 0);是可以的。
但是int f(int i = 0 ; int j);是不对的。
--------------------------------------------------------------------------------
一个class中如果有const 常量,声明的时候不能初始化,否则编译器报错
但是如果是static const int a = 0就可以
class中的const int a可以在构造函数中初始化,注意只能在初始化列表中,不能在函数体中赋值
其他的地方定义const 则需要初始化
如果是extern const int a ;就可以不做初始化
--------------------------------------------------------------------------------
内联函数应该放在.h的文件中,因为它是一个声明
另外在class中定义的函数是内联的
--------------------------------------------------------------------------------
1 const int a = 10;
2 int y = a;
是可以的