1,定义空类型,里面没有任何变量和成员函数,求sizeof,得到结果是1。因为声明该类型实例时,他在内存中要占有一定空间;
添加构造函数和析构函数后,得到结果还是1,构造函数和析构函数的调用只需要知道地址,而与类型实例无关;
把析构函数标记为虚函数,c++编译器会生产虚函数表,为每一个实例添加指向虚函数表的指针,在32位机器上指针占4个字节。
2,c++不允许复制构造函数传值参数,应该为引用;如
classA(classA other){value=other->value};
会导致复制构造函数里面调用构造函数,形成死循环,改为
classA(const classA& other){value=other->value};
3,赋值运算符函数
1 | Mystring& Mystring::operator=(const Mystring &str) |
如果内存不足,new char将抛出异常,使Data为空指针,这十分容易使系统崩溃,
办法一:先new再delete
办法二:创建临时实例
4,替换空格
思路:从后向前复制
1 | void blank_replace(char* string,int length)//length 为string的总长度 |
5,从尾到头打印链表
思路一:不能改变链表结构,使用栈
1 | void list_reverse(listnode* phead) |
思路二:使用递归,递归本质上是一个栈
1 | void list_reverse(listnode* phead) |
6,除法的效率比移位运算低得多,实际编程尽量使用移位运算代替除法
注意:右移容易引起死循环,比如0x0011右移4e位后变为0x1111,此时采用标志位左移再与的方法
1 | //计算1的个数,如1101中1的个数 |