您的位置:首页 > 其它

记录,待总结

2016-06-13 00:00 183 查看
1.关于函数地址

class A
{
public:
void f()
{
int f = 0;
}
void h()
{
int h = 0;
}
virtual void g() = 0;
};
int main()
{
cout<<&A::f<<endl; // 输出结果:1
cout<<&A::h<<endl; // 输出结果:1
cout<<&A::g<<endl; // 输出结果:1
return 0;
}


解释:代码中输出的不是函数的地址。事实上没有什么通用的方法可以得到成员函数的地址。cout不知道怎么输出成员函数的地址,于是将成员函数的地址转换为另一个类型(即bool型)输出。成员地址均非零,因此输出1。

2.char (*(*x[3])())[5],x是什么类型?

参考
http://topic.csdn.net/u/20120926/10/6b423fa9-e7c9-4584-b7b7-63607657e21d.html?54424

*(short *)&byte[0]是什么意思?

参考
http://topic.csdn.net/u/20120927/16/03b87825-0650-43c7-b3c1-ef955cfc863c.html?9294

3.结构体的赋值:

people Jack = {180.5, 179.2, "Jack", "济南"};

Mike = Jack;

4.一个类的成员变量列表中包含另一个类的对象,叫做包含(包容)。

10.传递数组的3种方式

1)void func(int a[]);

2)void func(int a[5]);

3)void func(int *a);

void func1(int a[], int n);
void func2(int a[5], int n);
void func3(int *a, int n);
int main()
{
int a[10], i;
for(i = 0; i < 10; i++)
a[i] = i + 1;
func1(a, 10);
func2(a, 10);
func3(a, 10);
return 0;
}
void func1(int a[], int n)
{
int i;
for(i = 0; i < n; i++)
cout<< a[i] << ' ' ;
cout<<endl;
}
void func2(int a[5], int n)
{
int i;
for(i = 0; i < n; i++)
cout<< a[i] << ' ' ;
cout<<endl;
}
void func3(int *a, int n)
{
int i;
for(i = 0; i < n; i++)
cout<< a[i] << ' ' ;
cout<<endl;
}


输出:

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

5.

#include<stdio.h>
union myun
{
struct
{
int x, y, z;
}u;
int k;
}a;

int main()
{
a.u.x=4; a.u.y=5; a.u.z=6;
a.k=0;
printf("%d\n",a.u.x);
}
分析:输出0

x和k共用一个存储单元,语句a.k=0;覆盖掉了a.u.x的值。

6.delete和delete[]的区别:

delete p 是删除释放一个单元,delete [] p 是释放 多个单元,具体的数据目是查系统的分配表得到的。

对于内置类型来说,delete和delete []是一样的
事实上new和delete都是两步操作,分配(释放)堆内存和调用构造(析构)函数,对于堆内存的释放,确实不需要做额外的事情,delete和delete []无差别,区别就在于调用析构函数这一步,如果用delete只会调用第一个对象的析构,只有调用delete[]才会调用全部的析构

11.基类的虚函数不进行实例化,就是抽象类。抽象类又叫ADT,它不能用来创建具体的对象

有纯虚函数的类都是抽象类

从抽象类派生出的新类必须为每个纯虚函数赋予功能,否则仍只是一个抽象类

不能定义一个抽象类的对象,只能定义一个指向抽象类的指针

指向抽象类的指针可以动态地指向其子类的对象,从而实现程序的多态

12.virtual float length() = 0;

像这个在虚函数后面加个“=0”,就是纯虚函数

纯虚函数彻底无任何功能,也不能直接调用,只能被子类继承并赋予新功能后才能使用

13.在一个类中定义了一个新的类型,这个类型只能在该类用使用。新类型称为嵌套类

14.endl在执行时,做两件事情:

1)输入'\n'

2)刷新缓冲区flush()

解释:执行换行符\n与执行结束符endl,最大的区别在处理文件上,以文件输出流(ofstream)为例。

当流的缓冲区未满时,执行'\n'是不会马上写到文件里。但是执行endl会强行把缓冲区里的内容写入文件中。

15.输出数据到文件的步骤:

1)包含头文件stream

2)建立ofstream对象:ofstream ocout;

3)将对象与文件关联:ocout.open("123.txt");

4)使用该对象输出数据:ocout<<"abc";

5)关闭与文件的连接:ocout.close;

16.读取文件中数据的步骤:

1)包含头文件stream

2)建立ifstream对象:ifstream icin;

3)将对象与文件关联:icin.open("123.txt");

4)使用该对象输入数据:icin>>temp;

5)关闭与文件的连接:icin.close;

17.将数据输出到文件时,可以选择两种输出方式:

1)二进制:空间小,速度快,精度高

2)文件:便于阅读,可直接编辑,可移植性强

18.同时打开文件的数目跟所操作系统而定,一般20个左右
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: