:: 是作用域运算符,
“::”:指明了成员函数所属的类。如:M::f(s) 就表示函数 f(s) 是类 M 的成员函数。
例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,
demo01.h(在头文件demo01.h中声明类A)
- // 声明类 A
- class A{
- public:
- void f();
- };
那么在类外定义 f 时, 就要写成 void A::f(){...},表示这个 f() 函数是类A的成员函数。
demo01.cpp(在源文件demo01.cpp中定义类A的成员函数)
- void A::f(){
- std::cout<<"hello world"<
- }
2、作用域成员运算符
表示引用成员函数及变量
例:System::Math::Sqrt() 相当于System.Math.Sqrt()
3、命名空间操作符
- namespace ns1 {
- const double RATE = 0.08; //常量
- double pay; //变量
- double tax() { //函数
- return a * RATE;
- }
-
- namespace_ns2 { //嵌套的命名空间
- int age;
- }
- }
如果想输出命名空间nsl中成员的数据,可以采用下面的方法:
- cout<
-
- cout<
-
- cout<
tax()< -
- cout<
//需要指定外层的和内层的命名中间名
可以看到命名空间的定义方法和使用方法与类差不多。但它们之间有一点差别:
- 在声明类时在右花括号的后面有一分号;
- 而在定义命名空间时,花括号的后面没有分号;
二、:
1、类的继承
类名冒号后面的是用来定义类的继承。
这里的冒号起到的就是声名基类的作用,在基类类名前面可以加public/private/protected等标签,用于标识继承的类型,也可以省略, 省略的话:
- 用class定义的类默认为private;
- 用struct定义的类默认为public;
与初始化列表一样的,这里也可以声名多个基类,各基类之间用逗号(,)隔开。
- class 派生类名 : 继承方式 基类名1 , 继承方式 基类名2 …{
- 类成员变量
- 类成员函数
- ...
- }
- class Derived : public Base1, public Base2{
- public:
- Derived();
- ~Derived();
- };
2、在构造函数后面初始化列表(“:”起分割作用)
在构造函数后面,冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。
构造函数,就是与类同名的函数,它与普通函数的区别在于,它没有返回类型。
在构造函数后面紧跟着冒号加初始化列表,各初始化变量之间以逗号(,)隔开。
类名::构造函数:变量A(值),变量B(值),...{}
- class myClass {
- public :
- myClass();// 构造函数,无返回类型,可以有参数列表,这里省去
- ~myClass();// 析构函数
- private:
- int a;
- const int b;
- }
-
-
- myClass::myClass():a(1), b(1) {} // 初始化列表
- 初始化列表的作用相当于在构造函数内进行相应成员变量的赋值,但两者是有差别的。
- 在初始化列表中是对变量进行初始化操作,
- 在构造函数内是进行赋值操作。
- 初始化列表、构造函数内进行成员变量的赋值两者的差别在对于像const类型数据的操作上表现得尤为明显:const 类型的变量必须在定义时进行初始化,而不能对const型的变量进行赋值;因此const类型的成员变量只能(而且必须)在初始化列表中进行初始化;
- myClass::myClass() {
- a = 1;// 对,效果相当于在初始化列表中进行初始化
- b = 1;// 错,const变量不能进行赋值操作;
- }
如果在构造函数中对const类型的变量赋值,则会出错
- 初始化列表中变量的顺序要与成员变量声明时的顺序相同。
myClass::myClass():b(1),a(b){}
这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。
3、结构体变量初始化
- typedef struct {
- unsigned char a:4;
- unsigned char c;
- } XXX;
4、public:和private:后面的冒号
public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个"public:”或"private:”出现为止。
"private:"为默认处理。
5、条件语句(条件表达式?表达式1:表达式2)
与?构成条件语句,作用相当于if else,如下;
- int a,b,c;
- a=3;
- b=2;
-
- 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只能是指向类、结构体、联合体的指针;
箭头(->)左边必须为指针
-
相关阅读:
售后处置跟踪系统设想
【编解码格式】DivX系列、XviD
MySQL8.0 定时任务EVENT
Hive环境搭建_远程部署
Allegro如何导出带有钻孔数据的dxf文件?
《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取
codeblocks安装、使用、调试教程
ps神经网络滤镜用不了,ps神经网络滤镜安装包
项目资源管理从学会向上管理开始
npm国内安装速度过慢,将npm改成淘宝镜像cnpm的方法
-
原文地址:https://blog.csdn.net/u013250861/article/details/127714952