记录,待总结

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是什么类型?
*(short *)&byte[0]是什么意思?

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个左右

转载于:https://my.oschina.net/windmissing/blog/690483

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值