快找工作了,恶补C++
1, string的那一章大概浏览了一下, 对一些string类型相关操作有一定的了解, 比如不能用字符直接对string 类型赋值.
string s1 = 'c'; // 非法
印象比较深刻的就是这么多了.
2, 看完第20章的string后, 觉得自己对类的概念很模糊, 很多概念不够清楚, 再开始看第10章 类.
类 由类名称,数据成员及成员函数组成, 其实就相当于C语言中的struct, 如:
class ca{
int a, b;
public:
f();
};
struct sa {
int a, b;
public:
f();
};
只是, 在class中, 数据成员int a, b被默认定义成私有数据成员, 不能提供类似ca.a;这样的直接访问,必须通过定义相应该的公有成员函数来进行访问, 体现了C++语言的class中数据类型的封装性. class中将所有数据封装起来,通过提供一组公有成员函数来操作.
在struct 中,数据成员int a, b默认定义成公共数据成员, 可以直接通过sa.a, sa.b来访问.
类成员初始化列表, 如下:
ca::ca(int aa, int bb):a(aa), b(bb) { } 成员初始化列表的好处在于直接把参数的一份拷贝赋给成员, 如果是用下面这种方法,
ca::ca(int aa, int bb)
{
a = aa;
b = bb;
}
则会先给a, b 赋一个默认值, 再把参数的拷贝赋给a, b; 假如a, b都是string 类型,则第二种方法会先将一个空串""赋给a,再把aa的一份拷贝赋给a, 如果是用第一种方法,则直接将aa的拷贝赋给a, 初始化列表的效率就高一点.照猜想,产生的中间代码也会少.
带const的成员函数, 如果成员函数不需要修改数据成员, 则应该将函数声明为如下形式,
void f() const;
数据成员与成员函数, 每个类对象都有自己的数据成员, 各个对象共享一套成员函数. 例如:
void ff()
{
ca a;
ca b;
a.f();
b.f();
}
a.f()与b.f()调用的都是存放在同一个地方的同一个函数. 不过该函数所操作的数据是属于各对象的.
static 数据成员, 静态数据成员在程序运行期间只定义一次, 同一个类的各个对象共享同一个static数据成员, 例如:
class ca {
int a, b;
static int c;
};
int ca::c = 0;
static 数据成员不能像普通数据成员那样通过类的构造函数进行初始化, 而要在类外进行初始化, 在main()函数运行之前, 类的static 数据成员就已经完成了初始化.
static const int a = 1; 这个语句可以出现在类中, 但是static int a = 1; const int a = 1; static const float a = 1.1; 均不能出现在类定义中. 只有static const int类型能在类中进行初始化.
构造函数与析构函数, 构造函数功能是对类中数据成员进行初始化, 申请资源, 营造好类的作用环境. 析构函数则销毁这个环境,回收资源.
类在定义一个对象的时候,就自动调用构造函数. 如:
void f()
{
ca ak;
ca bk;
}
构造函数先构造好ak的运行环境,再构造bk的运行环境; 在函数结束后, 先调用析构函数销毁bk的运行环境,再销毁bk的运行环境.
也就是,先顺序调用构造函数,再逆序调用析构函数.
可能我的理解有些是不正确的, 诚请看到此的朋友不吝指正.