2019-4-8
1关联容器
Map 初始化包含头文件 #include<map>
哈希表用到,key_value, map提取一个元素就得到一个pair的元素,pair模板类型,2个公有数据成员 first,second,其中,first成员保存const关键字
Set中的关键字也是const,可以用set迭代器来读取元素的值,但不能修改
2数组名s是常量指针,代表数组的首地址,值不可以改变
Char s[10] ,s = “abcdefd”错误
3 strcat(p1+2,p2+1)返回以p1+2为首的字符串
Srcpy(str+2, strcat(p1+2,p2+1))复制
4运算符优先级
*/%同一个优先级
/代表整除,得到一个整数
double(a/b)则是浮点数
5
#include <iostream> using namespace std; void func(char **m){ ++m; cout<<*m<<endl; } int main(){ static char *a[]={"morning", "afternoon", "evening"}; char **p; p=a; func(p); return 0; }
这是一个关于二维数组指针的问题。 假设定义一个int型的二维数组指针。 int Sec[2][3]={4,6,3,7,2,7}; int **P = Sec; **p 等价 Sec[0][0] *p 等价 Sec[0] *(p+n) 等价 Sec[n] *(*(p+n)+m) 等价 Sec[n][m] 所以++m,为行数增加为afternoon一行,而*m输出整行。
6
myClass::~myClass(){ delete this; this = NULL; }
编译不通过主要是语句 this=NULL;
因为类的构造函数中,this 指针的形式为Myclass *const this; 它是一个常量指针,指针的指向不能修改。
delete 的过程实际是先调用析构函数,然后释放内存
在析构函数内调用delete 会造成递归调用,
7虚函数和抽象基类
virtual 类型(函参) = 0 虚函数
抽象(基)类
不用来定义对象只作为一种基本类型作用做继承的类
凡是包含纯虚函数的类都是抽象类,因为纯虚函数是无法被调用的
8 虚函数是在基类中实现的函数,但派生类可能有不同版本,而纯虚函数是没有实现
在积累中,析构函数最好也要是虚函数
9 C++异常处理模型有责任处理那些因为出现异常而失效的对象,处理方式是调用这些失效对象的析构函数,释放掉它们占用的资源。如果析构函数再抛出异常,则会陷入无尽递归嵌套之中,因此这是不被允许的。
10
class B { public: virtual void Fun(){} }; class D: public B { public: void Fun(){} }; D dd; B* pb = ⅆ D* pd = ⅆ pb->Fun(); pd->Fun();
本题中,根据兼容性原则:当父类指针(引用)指向子类对象时,子类对象退化成父类对象,只能访问父类中定义的成员
如果B对象没有virtual修饰的话,B* pb = ⅆ dd就会退化为父类对象,pd就只能访问父类的成员B::Fun()。
但是又virtual修饰的话,就会展现多态行为,会根据实际指针指向的对象判断函数的调用。pb 和pd都指向子类对象,所以调用D::Fun()。
11
据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。
C++ 通过创建类来支持封装和数据隐藏(public、protected、private)。我们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。默认情况下,在类中定义的所有项目都是私有的。
12 若局部变量和全局变量重名,
局部变量会屏蔽全局变量,要使用全局变量,需要使用“::”
13
char(1),int(4),float(4),double(8),long(8)
而指针变量存放相同数据类型的变量的首地址,。对于32位操作系统来说,即地址总线有32位,所以是4个字节。
64位操作系统 指针8个字节
14
静态变量是粗放在程序的全局数据区,不是在堆栈中
15