您的位置:首页 > 其它

12.3——类作用域,构造函数,友元,static类成员

2015-08-07 11:22 239 查看
类作用域:

(1)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符

来引用其他的成员。

(2)函数的返回值不一定需要在类的作用域中,但是若是返回类中定义的类型,则必须完全加上域作用符来限定,如:

class1::type1

(3)类作用域中的名字查找:首先在使用该名字的块中查找名字的声明,只考虑在该项使用之前声明的名字。若是找不到名字

则在包围的作用域中查找。

构造函数:

(1)构造函数可以被重载,而实参将决定使用哪一个构造函数

(2)构造函数不能声明为const

(3)不管对象是否是const都可以用一个普通的构造函数来初始化它

(4)可以通过explicit来声明构造函数,以防止在需要隐式转换的上下文中使用构造函数。

(5)可以直接显示的进行类成员初始化

class st
{
public:
int a;
int b;
};
int main()
{
st sta={1,2};
cout<<sta.a<<' '<<sta.b<<endl;
system("pause");
}


友元:

(1)允许特定的非成员函数或者其他类来访问一个类的私有成员,同时仍阻止一般的访问,这时可以用到友元。友元可以在类中的任何

地方声明。

class class2
{
public:
class2& func2()
{cout<<"yanliang";}
}
void func()
{cout<<"this is a function"}
class class1
{
friend class class2;//将其它类声明为友元类
friend class2& class2::func2();//将其它类的成员函数声明为友元函数
friend void func();//将普通函数声明为友元函数
public:
};


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数据成员可以作为默认实参

class class1
{
public:
class1(int s=b){}//将static数据成员作为默认实参
private:
static const int b=2;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: