• C++:符号的作用【::(命名空间、类、结构体作用域限定符)】【:(类的继承、初始化列表、)】【A.B(A必须为对象或结构体)】【A->B(箭头左边必须为指针),A只能是指向类、结构体、联合体的指针】


    一、::(作用域运算符

    ::作用域运算符

    • A::B表示作用域A中的-名称B;
    • A可以是命名空间结构体

    1、类作用域操作符

    “::”:指明了成员函数所属的。如:M::f(s) 就表示函数 f(s) 是类 M 的成员函数。

    • 如果想在类的外部引用静态成员函数,或在类的外部定义成员函数都要用到 “::”
    • 使用命名空间里的类型或函数也要用到 “::”(如:std::cout, std::cin, std::string 等等)

    例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,

    demo01.h(在头文件demo01.h中声明类A)

    1. // 声明类 A
    2. class A{
    3. public:
    4. void f();
    5. };

    那么在类外定义 f 时, 就要写成 void A::f(){...},表示这个 f() 函数是类A的成员函数。

    demo01.cpp(在源文件demo01.cpp中定义类A的成员函数)

    1. void A::f(){
    2. std::cout<<"hello world"<
    3. }

    2、作用域成员运算符

    表示引用成员函数及变量

    例:System::Math::Sqrt() 相当于System.Math.Sqrt()

    3、命名空间操作符

    1. namespace ns1 {
    2. const double RATE = 0.08; //常量
    3. double pay; //变量
    4. double tax() { //函数
    5. return a * RATE;
    6. }
    7. namespace_ns2 { //嵌套的命名空间
    8. int age;
    9. }
    10. }

    如果想输出命名空间nsl中成员的数据,可以采用下面的方法:

    1. cout<
    2. cout<
    3. cout<tax()<
    4. cout<//需要指定外层的和内层的命名中间名

    可以看到命名空间的定义方法使用方法与类差不多。但它们之间有一点差别:

    • 声明类时在右花括号的后面有一分号;
    • 而在定义命名空间时,花括号的后面没有分号;

    二、:

    1、类的继承

    类名冒号后面的是用来定义类的继承。

    这里的冒号起到的就是声名基类的作用,在基类类名前面可以加public/private/protected等标签,用于标识继承的类型,也可以省略, 省略的话:

    • 用class定义的类默认为private;
    • 用struct定义的类默认为public;

    初始化列表一样的,这里也可以声名多个基类,各基类之间用逗号(,)隔开。

    1. class 派生类名 : 继承方式 基类名1 , 继承方式 基类名2 …{
    2. 类成员变量
    3. 类成员函数
    4. ...
    5. }
    1. class Derived : public Base1, public Base2{
    2. public:
    3. Derived();
    4. ~Derived();
    5. };

    2、在构造函数后面初始化列表(“:”起分割作用)

    在构造函数后面,冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型

    构造函数,就是与类同名的函数,它与普通函数的区别在于,它没有返回类型。

    在构造函数后面紧跟着冒号加初始化列表,各初始化变量之间以逗号(,)隔开。

    类名::构造函数:变量A(值),变量B(值),...{}
    1. class myClass {
    2. public :
    3. myClass();// 构造函数,无返回类型,可以有参数列表,这里省去
    4. ~myClass();// 析构函数
    5. private:
    6. int a;
    7. const int b;
    8. }
    9. myClass::myClass():a(1), b(1) {} // 初始化列表
    • 初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。
      • 在初始化列表中是对变量进行初始化操作
      • 在构造函数内是进行赋值操作
    • 初始化列表构造函数内进行成员变量的赋值两者的差别在对于像const类型数据的操作上表现得尤为明显:const 类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化;
      1. myClass::myClass() {
      2. a = 1;// 对,效果相当于在初始化列表中进行初始化
      3. b = 1;// 错,const变量不能进行赋值操作;
      4. }

      如果在构造函数中对const类型的变量赋值,则会出错

    • 初始化列表中变量的顺序要与成员变量声明时的顺序相同。
      myClass::myClass():b(1),a(b){}

      这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。

    3、结构体变量初始化

    1. typedef struct {
    2. unsigned char a:4;
    3. unsigned char c;
    4. } XXX;

    4、public:和private:后面的冒号

    public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个"public:”或"private:”出现为止。

    "private:"为默认处理。

    5、条件语句(条件表达式?表达式1:表达式2)

    与?构成条件语句,作用相当于if else,如下;

    1. int a,b,c;
    2. a=3;
    3. b=2;
    4. c=a>b?a:b;// 如果a>b成立,则反a赋给c,否则把b赋给c

    条件语句的结构为:

    条件表达式?表达式1:表达式2

    条件表达式为true时,表达式的值为表达式1的值,否则为表达式2的值。

    三、符号.和->的作用和区别

    1、A.B

    A.B则A为对象或者结构体;

    点号(.)左边必须为实体

    2、A->B

    A->B:

    • A为指针
    • ->是成员提取,
    • A->B是提取A中的成员B,
    • A只能是指向类、结构体、联合体的指针;

    箭头(->)左边必须为指针

    C++中::和:, .和->的作用和区别? - 知乎

    C++中::和:, .和->的作用和区别

    C++ 类的继承_Remarkable!的博客-CSDN博客_c++类的继承 

  • 相关阅读:
    售后处置跟踪系统设想
    【编解码格式】DivX系列、XviD
    MySQL8.0 定时任务EVENT
    Hive环境搭建_远程部署
    Allegro如何导出带有钻孔数据的dxf文件?
    《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取
    codeblocks安装、使用、调试教程
    ps神经网络滤镜用不了,ps神经网络滤镜安装包
    项目资源管理从学会向上管理开始
    npm国内安装速度过慢,将npm改成淘宝镜像cnpm的方法
  • 原文地址:https://blog.csdn.net/u013250861/article/details/127714952