类作用域:
(1)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符
来引用其他的成员。
(2)函数的返回值不一定需要在类的作用域中,但是若是返回类中定义的类型,则必须完全加上域作用符来限定,如:
class1::type1
(3)类作用域中的名字查找:首先在使用该名字的块中查找名字的声明,只考虑在该项使用之前声明的名字。若是找不到名字
则在包围的作用域中查找。
构造函数:
(1)构造函数可以被重载,而实参将决定使用哪一个构造函数
(2)构造函数不能声明为const
(3)不管对象是否是const都可以用一个普通的构造函数来初始化它
(4)可以通过explicit来声明构造函数,以防止在需要隐式转换的上下文中使用构造函数。
(5)可以直接显示的进行类成员初始化
4 class st 5 { 6 public: 7 int a; 8 int b; 9 }; 10 int main() 11 { 12 st sta={1,2}; 13 cout<<sta.a<<' '<<sta.b<<endl; 14 system("pause"); 15 }
友元:
(1)允许特定的非成员函数或者其他类来访问一个类的私有成员,同时仍阻止一般的访问,这时可以用到友元。友元可以在类中的任何
地方声明。
1 class class2 2 { 3 public: 4 class2& func2() 5 {cout<<"yanliang";} 6 } 7 void func() 8 {cout<<"this is a function"} 9 class class1 10 { 11 friend class class2;//将其它类声明为友元类 12 friend class2& class2::func2();//将其它类的成员函数声明为友元函数 13 friend void func();//将普通函数声明为友元函数 14 public: 15 };
static类成员:
(1)因为全局对象会破坏封装,即外部的用户都可以访问修改这个成员,所以才有静态类成员。
(2)static数据成员独立于该类的任意对象而存在,每个static数据成员是与类所关联的,并不与该类的某个对象关联
(3)类也可以定义static成员函数,它没有this指针,只能直接使用static成员,而不能直接使用非static成员。
(4)可以通过作用域操作符直接调用static成员,或者对象的指针,引用或本身间接调用。
static成员函数:
(5)static成员函数,不能被声明为const成员函数,因为它本身就不能和任何对象绑定
(6)static成员函数,不能声明为虚函数
static数据成员:
(7)static数据成员必须在类外定义(正好一次)
(8)static数据成员不是通过构造函数初始化,而是通过定义时初始化
(9)const static 数据成员可以在类里面初始化这是上面一条的一个例外)
(10)非static数据成员不能用作默认实参,因为他的值不能脱离对象而存在,但是static数据成员可以作为默认实参
1 class class1 2 { 3 public: 4 class1(int s=b){}//将static数据成员作为默认实参 5 private: 6 static const int b=2; 7 };