12.3——类作用域,构造函数,友元,static类成员
2015-08-07 11:22
239 查看
类作用域:
(1)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符
来引用其他的成员。
(2)函数的返回值不一定需要在类的作用域中,但是若是返回类中定义的类型,则必须完全加上域作用符来限定,如:
class1::type1
(3)类作用域中的名字查找:首先在使用该名字的块中查找名字的声明,只考虑在该项使用之前声明的名字。若是找不到名字
则在包围的作用域中查找。
构造函数:
(1)构造函数可以被重载,而实参将决定使用哪一个构造函数
(2)构造函数不能声明为const
(3)不管对象是否是const都可以用一个普通的构造函数来初始化它
(4)可以通过explicit来声明构造函数,以防止在需要隐式转换的上下文中使用构造函数。
(5)可以直接显示的进行类成员初始化
友元:
(1)允许特定的非成员函数或者其他类来访问一个类的私有成员,同时仍阻止一般的访问,这时可以用到友元。友元可以在类中的任何
地方声明。
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)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符
来引用其他的成员。
(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; };
相关文章推荐
- ListView 定位位置;
- 怎样设置才能允许外网访问MySQL
- Oulipo
- 8大JS库/框架对比
- [转载]SELinux 环境下网络服务设置,配置 Apache 、Samba、NFS
- 链表头结点作用
- grpconv/pwconv/pwunconv
- Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the desi
- POj3422 Kaka's Matrix Travels 最小费用最大流 拆点
- 100分程序员的8个习惯
- 关于精简安装office2010的步骤
- chrome livestyle插件
- ArcGIS API for Silverlight 使用GeometryService求解线与线的交点
- 一个简单的Promise 实现
- smarty中常用方法实例总结
- 详解次小生成树以及相关的C++求解方法
- struts2实现文件下载
- leetcode 81: Search in Rotated Sorted Array II
- 如何配置tomcat服务器
- TreeView checkbox 全选