C++学习笔记1,才开始看C++ Primer,就写了点自己觉得改注意的地方,这里只是C++的大概浏览。
1、C++预处理命令
__CPLUSPLUS:定义了此预处理器为C++程序
__STDC__:记录已包被编译的行数
__FILE__:包含正在被编译的文件
__TIME__:当前编译文件的编译时间
__DATE__:当前编译文件的编译日期
如:
cout<<__cplusplus<<endl;
cerr<<"Error:"<<__FILE__<<":line"<<__LINE__<<endl;
cout<<"Date:"<<__DATE__<<",Time:"<<__TIME__<<endl;
2、assert断言:
assert(条件);用来判断代码中一个必须满足的条件,既当其中条件不满足则输出诊断信息,然后结束程序。
3、/n与endl的区别:
/n:换行。
endl:在输出流中插入一个换行,并刷新输出缓冲区。
4、动态分配内存:
///
分配一个没有名字的int,初始化为256
int* point = new int(256);
释放内存
delete point;
///
///
动态分配数组,大小为5,无法给初始值
int* pia = new int[5];
释放内存
delete[] pia;
///
5、常成员函数:
egg:int size() const;
此函数中不能更新认为成员变量
6、重载运算符:
子类重新定义和父类一样的运算符重载,父类的这个函数必须为虚函数。(不确定,我不这样,程序报错,不知道是不是我想的这样)
7、函数的参数默认数值在声明的时候写出,定义时候不能再写出。
egg:class a
{
………….
void abc(int i = 10 );//此处给出初值
…………..
};
void a::abc(int i){…………..} //此处不能在给出
8、类模板:
模板的声明和定义只能在同一个文件中,一般模板类声明和定义都在头文件中。
ps:一般在构造函数中,要初始化一定的数据,但是可以会发生,定义了一个int型的模板,里面的初值是个字符型的常量,默认的字符型数据就不可以被赋予给int类变量。
egg:template <class T>
class a
{
………………
public:
a(T nal = ‘a’);
………………
private:
T nal;
};
template <class T>
a<T>::a(){………….}
void main()
{
……………
a<int> L;//报错
……………
}
PS:解决办法,可以用a(T nal = T());
一个数组类定义实现
一个数组模板类定义实现
9、名字空间:
定义:
namespace Leaf
{
……………….
class a{…………};
class b{…………};
class c{…………};
……………….
}
四种访问方式:
a、 用限定修饰名字符来访问名字空间的类型定义(::);
egg:Leaf::a A直接使用。
b、 使用using声明来访问类型定义;
egg:using Leaf ::b
b B;只能访问到名字空间里面的b类定义
c、 使用空间别名机制来访问类型定义;
egg:
namespace G = Leaf;
G.a A;
d、 使用using指示符来访问类型定义。
egg:
using Leaf
a A; b B; c C; d D;里面的所有类定义都可以访问。