C++ 的一些概念(2)。

静态数据成员:就是说所有这个类的对象,都公用这个数据成员,你变了一个对象的静态成员的值,那么所有的都跟着变了。比如说:

class Clock{
int Hour, Minute;
static int Second; //定义了一个静态成员
}

// 函数中调用时:
Clock c1,c2,c3;
//这三个实体共用Second这个数据,变一个等于全变。
//直接调用时:
Clock::Second

静态函数成员:一般用来访问静态数据成员,就是说不用定义实体,也可以去访问它。而一般函数成员只能通过实体来访问。如果想要利用静态函数来访问非静态数据,就必须要通过参数,比较麻烦,也不推荐。

Class Clock{
public
static int getSecond();//定义一个静态函数成员
private:
static int Second;
}

//调用时,可以直接访问:

Clock::getSecond();

友元函数:定义类的时候,我们是定义一种客观存在的物体,比如一个人,一辆车,但是有一些抽象的物体,比如亲戚关系等,它没有实体,并且很难形成一个类,友元函数就是为了定义这种关系而存在的。比如之前定义了表,但是不同时区有时差,要计算两个实体表中的时差,不能专门建立一个类去做这个事情,但是又需要去算,并且涉及到了俩个表呢,放在Clock的类里面又显得有点不伦不类,so,就在函数前面加一个friend 关键词,意思就是,这个函数定义在类外,用来表示类之间的关系

Class Clock{
int Hour, Minute, Second;
public:
friend int timeLag(Clock &c1, Clock &c2);
//其他函数略了
}
//调用时,不需要应用实体:
Clock c1(1,1,1);
Clock c2(2,2,2);
int lag=timeLag(c1,c2);

友元类: 这个东西比较纠结,就是比如我在类B里面定义了一个友元类A,那么就是说类B是信任类A的,类A此时就嚣张了,可以访问类B的私有和保护成员。同时,作为我信任你的一点回馈吧(天啊这不是司马懿么3_3),类A的函数就都是类B的友元函数。(真纠结啊 = = )

要注意的三点:1.友元关系不能传递,可以这么表述:A=B  B=C 但 A!=C  . 2.友元关系是单向的。3. 友元关系不被继承。

Class B{
private
....
friend class A;//此时类A是类B的友元类
....
}

常引用:函数的参数类型前面加个const,那么这个参数不能被更新,用了什么就是什么了。

常对象:对象名前面加个const,那么这个对象必须初始化,并且不可以被更新。

void  display(const char &a){
cout<<a<<endl;
}
//引用时 只能给a赋一次值

int const pie=3.14;
pie=2; // nonono you can't


常成员函数:就是在函数声明后面,分号前面加个const,这个函数就成了常成员函数,它只能调用常成员函数不可以更新类的数据成员。如果一个对象是常对象,那么这个对象只能调用它的常成员函数。同时,他可以用于重载区分,举个例子:

Class A{
private:
int a,b;
public:
void func();
void func() const; // 这就是常成员函数了
...//其他函数省略
}
// 写函数时,对于常成员函数要写明:

void A::func() const{ //const 不可少,否则就变成了第一个函数
.......
}

//调用时:

A test1(2,2);
const A test2(5,5);
test1.func(); //调用void func();
test2.func(); //调用void func() const;

常数据成员:如果一个数据成员前面加了const,那么任何函数不可以对这个成员赋值,只能通过构造函数初始化。


关于几个预编译中的关键字:

#include   这个谁都知道  一般分两个格式: <文件名>   “文件名”   两者不同之处是:前者为标准搜索,文件在include子目录下;后者先在当前目录搜索,没有再按标准搜索,所以同一目录下,用双引号,外面的文件,用<>。

#define 定义符号常量  例如  #define PI 3.14,但是用const int PI=3.14会更好点。

#undef  删除#define定义的宏,这之后#define定义的宏就废了。

#if 等,条件编译指令,就是说达到某些条件时才参与编译。可以使编译在不同条件下产生不同目标代码,其实吧。。我觉得不大常用,调试的时候用用?反正作为一个普通的coder我没用过啊~

posted @ 2012-02-08 23:46  勤劳的饺子  阅读(776)  评论(4编辑  收藏  举报