类作用域:

(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类成员的更多相关文章

  1. OOP3(继承中的类作用域/构造函数与拷贝控制/继承与容器)

    当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内.如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名字的定义 在编译时进行名字查找: 一个对象.引用或指针的 ...

  2. 类里面的非static const成员

    类里面的成员变量可以用const修饰,在只用const不用static修饰的情况下,这种使用的限制比较多 (1)不能定义处初始化,必须在类的构造函数初始化列表里面初始化(虽然在vs中,可以在定义处初始 ...

  3. C++_派生类的构造函数及派生类和基类之间的特殊关系

    派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...

  4. c++ 派生类的构造函数 与 基类构造函数的关系

    <面向对象程序设计基础(第二版>李师贤等,第254页:C++语言的基本规则是:创建一个派生类的对象时,如果基类带有构造函数,则先调用基类的构造函数,然后才调用派生类的构造函数. <T ...

  5. 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...

  6. C++中static类成员

    static局部变量 static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化 这种对象一旦被创建,在程序结束前不会被撤销.在该函数被多次调用的过程中,静态局部对象会持续存在 ...

  7. C++类中的static数据成员,static成员函数

    C++类中谈到static,我们可以在类中定义static成员,static成员函数!C++primer里面讲过:static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在, ...

  8. [改善Java代码]建议40:匿名类的构造函数很特殊

    建议40: 匿名类的构造函数很特殊 在上一个建议中我们讲到匿名类虽然没有名字,但可以有一个初始化块来充当构造函数,那这个构造函数是否就和普通的构造函数完全一样呢?我们来看一个例子,设计一个计算器,进行 ...

  9. C++:派生类的构造函数和析构函数

    4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类 ...

随机推荐

  1. void运算符

    void是一元运算符,它出现在操作数之前,操作数可以是任意类型,操作数会照常计算,但忽略计算结果并返回undefined.由于void会忽略操作数的值,因此在操作数具有副作用的时候使用void来让程序 ...

  2. mysql5.5版本导入sql报错

    1 在5.5的版本中不支持utf8_german2的类型 2 在5.5版本中只支持timestamp类型设置默认值为CURRENT_TIMESTAMP,不支持datetime类型默认值设置为CURRE ...

  3. SQL系列学习 存储过程&事物语法

    /*学习事物基本语法*/ /*增加课室名的唯一索引*/ ALTER table class add constraint uni_ClassName unique(name) /*创建存储过程,其中增 ...

  4. ML-学习提纲2

    https://machinelearningmastery.com/a-tour-of-machine-learning-algorithms/ http://blog.csdn.net/u0110 ...

  5. pycharm激活码 pycharm安装后激活方式 pycharm汉化包安装

    汉化包 下载地址: 链接:http://pan.baidu.com/s/1pL6xWl9 密码:x1fh 将下载好的文件解压:将resources_cn.jar放到安装目录下的lib目录下即可 重启 ...

  6. swfit:运算符重载 Operator Methods

    Operator Methods Classes and structures can provide their own implementations of existing operators. ...

  7. saltstack 源码安装

    面向对象编程(oop) 面向对象: 面向对象三大特性: 封装 继承 多肽封装: 封装就是将具体的客观事物封装成抽象的类.并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可行的进行信息隐藏继承 ...

  8. uva1628 Pizza Delivery

    fixing great wall 的变形dp(i,j,k,p)不考虑i-j的客人,还要送k个人,目前位置在p起点i和总数量k都要枚举dp(i,j,k,p)=max(dp(m,j,k-1,p)+val ...

  9. spring踩坑

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...

  10. 文本三剑客之grep

    接受正则表达式,按行匹配,将会过滤出匹配的所有行 格式: grep   [OPTION]...     PATTERN    [FILE]... 可以看出,grep后可以同时接多个文件 选项OPTIO ...