c/c++知识点

1. 必须对任何const引用类型成员和没有默认构造函数的类类型成员使用初始化列表,初始化次序是成员定义的次序。

2. 使用默认构造函数定义对象不能加空括号,否则会被认为是函数声明。

正确方式:ClassA  obj;    ClassA   obj(1);    ClassA   obj =ClassA();    错误方式:ClassA   obj();//会被认为是函数声明

3. static关键字至少有下列作用:

	(1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
	(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(在其他模块用需要使用using namespace)
	(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
	(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
	(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
4.	
	a) 一个整型数(An integer)
	b) 一个指向整型数的指针(A pointer to an integer)
	c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
	d) 一个有10个整型数的数组(An array of 10 integers)
	e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
	f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
	g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
	h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
	答案是:
	a) int a; // An integer
	b) int *a; // A pointer to an integer
	c) int **a; // A pointer to a pointer to an integer
	d) int a[10]; // An array of 10 integers
	e) int *a[10]; // An array of 10 pointers to integers
	f) int (*a)[10]; // A pointer to an array of 10 integers
	g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
	h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
5. const关键字至少有下列n个作用:  (1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;  (2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;  (3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;  (4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;  (5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为"左值"。例如:  const classA operator*(const classA& a1,const classA& a2);  operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错:  classA a, b, c;  (a * b) = c; // 对a*b的结果赋值  操作(a * b) = c显然不符合编程者的初衷,也没有任何意义。
6. new, delete表达式不可重载。
 operate new和operate delete是标准库函数,负责分配和释放内存,不会调用构造和析构函数,可以重载。
	placement new负责在原始内存中初始化一个对象。new (ptr) ClassA;    new (ptr) ClassA(1);
	可以显示调用析构函数,ptr->~ClassA(); 析构但不释放内存。
	类可以定义自己的operate new和operate delete;如果此时需要使用全局new,ClassA *p = ::new ClassA;    ::delete p;
7.	类成员指针
	数据成员指针:string ClassA::* p = &ClassA::name;
	成员函数指针:string (ClassA::*func)() = &ClassA::getName;可以typedef string (ClassA::*FUNC)(); FUNC func = &ClassA::getName;
 使用类成员指针.*  ->*:string name = (p->*func)();
8. 类的构造函数前加explicit关键字防止发生隐士转换。 
		
 
 

你可能感兴趣的:(编程,String,function,Integer,delete,Pointers)