C/C++ 初学简单笔记 ―2―

2014-11-24 07:38:55 · 作者: · 浏览: 0
1. 静态成员

静态成员属于类所有,不属于对象。但为所有对象所共享。

因为静态成员不属于对象所有,所以在对象初始化的时候,不会为静态成员分配内存空间。

故在类中,静态成员只是做了一个引用性的声明,必须在类外进行正式的声明。

声明格式: 类型 类名::静态成员名; // 也可以赋初始值,对于静态成员, 系统会自动赋予初始值。
如:
class A
{
private:
static int id;
}

int A::id;

访问: A::id


2. 静态方法,同样为类所有,为对象所共享,类可以直接调用,而不必声明对象来调用

调用格式: 类名::方法

注意,在静态方法中,可以访问静态成员和静态成员方法。但是不能访问非静态成员变量,

因为此时对象还没有生成,何来的成员变量?

如果要在静态方法中使用成员变量,可以使用别名。
如:
static void display(类名 &对象别名p)
{p.xx=...};


3. 类的友元。

C++为解决效率的需要,提出了一个友元的概念,

只要把某个类外函数声明为该类的友元,就可以直接访问类中的任何成员(public,protect,private)


1)将普通函数声明为类的友元

2)将某个类的成员函数声明为本类的友元函数

3)将某个类声明为本类的友元类


友元都声明在类中,只是说明友元函数有权访问类的所有成员,但并不表明友元函数和友元类属于该类的成员。

友元声明不受权限的限制,声明在哪一行都行。

友元用friend修饰,一般使用对象的别名作为参数


4. 类的嵌套

要有初始化列表,初始化顺序跟初始化列表无关,只于对象声明的顺序有关。

如果没有写,则调用默认的构造函数。

如:
class C
{
private:
A a;
B b; // A,B 都是类名
public:
C(int a, int b, int c):a(a),b(b) {...}; // 调用 A(int i)构造方法初始化 a

}