12.3——类作用域,构造函数,友元,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={,};
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:
;
};
12.3——类作用域,构造函数,友元,static类成员的更多相关文章
- OOP3(继承中的类作用域/构造函数与拷贝控制/继承与容器)
当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内.如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名字的定义 在编译时进行名字查找: 一个对象.引用或指针的 ...
- 类里面的非static const成员
类里面的成员变量可以用const修饰,在只用const不用static修饰的情况下,这种使用的限制比较多 (1)不能定义处初始化,必须在类的构造函数初始化列表里面初始化(虽然在vs中,可以在定义处初始 ...
- C++_派生类的构造函数及派生类和基类之间的特殊关系
派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...
- c++ 派生类的构造函数 与 基类构造函数的关系
<面向对象程序设计基础(第二版>李师贤等,第254页:C++语言的基本规则是:创建一个派生类的对象时,如果基类带有构造函数,则先调用基类的构造函数,然后才调用派生类的构造函数. <T ...
- 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友
1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...
- C++中static类成员
static局部变量 static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化 这种对象一旦被创建,在程序结束前不会被撤销.在该函数被多次调用的过程中,静态局部对象会持续存在 ...
- C++类中的static数据成员,static成员函数
C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在, ...
- [改善Java代码]建议40:匿名类的构造函数很特殊
建议40: 匿名类的构造函数很特殊 在上一个建议中我们讲到匿名类虽然没有名字,但可以有一个初始化块来充当构造函数,那这个构造函数是否就和普通的构造函数完全一样呢?我们来看一个例子,设计一个计算器,进行 ...
- C++:派生类的构造函数和析构函数
4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类 ...
随机推荐
- 014、BOM与DOM对象的应用
Screen屏幕对象 Width:屏幕的宽度 Height:屏幕的高度 availWidth:屏幕的有效宽度(不含任务栏) availHeight:屏幕的有效高度(不含任务栏) colorDepth: ...
- CCF|最大波动|Java|100
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Sc ...
- 用户授权policy
定义策略类 php artisan make:policy PostPolicy app/Policies/PostPolicy.php public function update(User $us ...
- 洛谷 P1726 上白泽慧音
题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间 ...
- MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB
Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作.Spring Boot的目的是提供一组工具,以便快速构建容易配置的Spring应用程序,省去大量传统S ...
- Linux centos7开机界面出现多个选项
centos7开机界面出现多个选项时 前面几个选项正常启动,最后一个选项急救模式启动(系统出项问题不能正常启动时使用并修复系统) 在CentOS更新后,并不会自动删除旧内核.所以在启动选项中会有多个内 ...
- JavaScript轮播图
需求: 鼠标移动到下标页码时,也转换到相对应的图片: 多张图片可以自动轮播: 鼠标移动至图片时,停止自动轮播: 可以手动左右调节: <!DOCTYPE html> <html lan ...
- 跑RFCN
按照这个来http://blog.csdn.net/sinat_30071459/article/details/53202977
- 使用VS自带WCF测试客户端
打开VS自带WCF测试客户端 打开VS2015 开发人员命令提示 输入:wcftestclient,回车 提取wcftestclient 当然,可以看到VS2015 开发人员命令提示知道,当前路径在C ...
- luogu P2865 路障
https://www.luogu.org/problemnew/show/P2865 看到题解好多dijkstra,作为一名钟爱于spfa的蒟蒻看不下去了. 有些spfa要跑两边,代码量要曾长好多( ...