c++注意事项

纯虚函数只能有.hh文件,不能有.cc文件。c++

 

类中函数能够有默认参数,可是默认参数只能出如今.hh中,不能出如今.cc中。ide

 

类中的通常数据成员是对每一个对象都有本身的拷贝的,并且每一个通常成员函数必定要有一个调用它的对象。函数

static数据成员不在类的声明中定义或初始化。而在对应的.cc文件中初始化(因为交叉编译/连接的缘由)。只在声明中带有static关键字,可是在对应的.cc文件中,是不带static关键字的。也能够用默认初始化,可是仍是要出如今.cc文件中,不然会出现连接错误。其余外部代码可用::访问静态成员变量。spa

static成员函数能够定义在类型的声明中或在定义中(.hh中或.cc中)。外部代码也能够用::来访问静态成员函数。code

可是在本类中,静态数据成员和成员函数不须要用::访问,直接访问就能够了。对象

 

c++支持类模板和函数模板。blog

定义类模板和定义对象以下:继承

template<typename T> class Point {
T x_coord, y_coord;
public:
Point() : x_coord(0), y_coord(0) { }
Point(T x, T y) : x_coord(x), y_coord(y) { }
...
};

Point<float> p1(3.31, 2.67);
Point<int> p2(15, -6);

定义函数模板和调用函数以下:get

template <typename T>
T square(T val) {
return val * val;
}

int i = 15;
cout << i << " squared = " << square(i) << endl;
Matrix m(3, 3);
// Matrix provides operator*
Matrix m2 = square(m);

函数模板不须要指定模板参数,编译器能够本身从上下文推断出来类型。编译器

函数模板声明以下:

template <typename T> T square(T val);

若是须要也能够指定模板参数:

double result = square<double>(3);

3是整形,因此square(3)会被初始化为square<int>()

因此显示指定模板函数参数是很必要的,尤为是把一个函数模板初始化冰川递给另外一个函数或函数模板的时候。

 

 structs或者classes提供了()的重载,而后就能够对其使用适配器了。

STL容器是各类拷贝进拷贝出的。STL使用拷贝构造函数和赋值操做符。

Widget(const Widget&);

Widget & operator=(const Widget &);

当容器和类继承有关时当心子类对象被分片(父类的容器存放子类对象,致使子类对象的子类部分数据成员被舍掉而不能存放)。

相关文章
相关标签/搜索