网站切版教程,iis 发布网站asp网站,国网公司网站,襄阳网站设计制作公司前言 本系列文章承接C语言的学习#xff0c;需要有C语言的基础才能学会哦~ 第7篇主要讲的是有关于C的取地址运算符重载、类型转换、static成员和友元。 C才起步#xff0c;都很简单 目录
前言
取地址运算符重载
const成员函数
基本语法
特点
取地址运算符重载
类型转换… 前言 本系列文章承接C语言的学习需要有C语言的基础才能学会哦~ 第7篇主要讲的是有关于C的取地址运算符重载、类型转换、static成员和友元。 C才起步都很简单 目录
前言
取地址运算符重载
const成员函数
基本语法
特点
取地址运算符重载
类型转换
static成员
友元
特点 取地址运算符重载
const成员函数
tipsconst只有在修饰指向内容的时候才设计权限的放大和缩小的问题。
基本语法
//无const传入参数为Date* const this,不可修改this指针本身
void Print()
{cout _year - _month - _day;
}//有const传入参数为const Date* const this,不可修改this指针和其指向的内容
void Print() const
{cout _year - _month - _day;
}
如上const修饰后的成员函数Print不可以在对类的任何成员进行修改
特点
①const修饰的成员函数const放在参数列表后。 ②const修饰后成员函数不可以修改类对象的任何成员。
使用const可以避免成员被意外修改应加尽加
取地址运算符重载
对于自定义类型只要是运算符要使用必须先重载。
Date* operator()
{return this;
}const Date* operator() const
{return this;
}
为了避免权限问题需要重载取Date*指针和const Date*指针。或者可以自定义返回一个任意地址也可空指针不过要当心出错。
类型转换
C11支持内置类型隐式类型转化为自定义类型但是需要有相关内置类型为参数的构造函数。 该隐式转换过程中需要调用到构造函数。
//类A的构造函数
A(int a1)
:_aa1(a1)
{}//运行代码
A aa1 1;
①语法上先用常数1作为构造函数的参数构造一个临时对象再用这个临时对象拷贝构造为aa1。这里会出现连续的构造而编译器会将其优化为直接一次构造。
A aa2 1;//不可行×
如上要注意以1构造的临时对象为const修饰要注意权限问题。
const A aa3 1;
②如果不想发生内置类型隐式转换为自定义类型则用关键字explicit。 ③若A类型有多个内置类型成员(构造函数有多个参数)想用两个或以上参数进行隐式转换需要用大括号和逗号表达。如下。
A aa3 {1, 1}
static成员
①static修饰的成员变量成为静态成员变量static变量必须要在类外初始化。类里面声明类外初始化 ②static成员变量不属于某个具体对象存放在静态区。 ③static修饰的成员函数称之为静态成员函数static函数没有this指针。 ④static成员函数可以访问静态成员但是不能访问非静态的成员因为他没有this指针没有隐藏的this指针 ⑤不可以在声明时给static成员变量缺省值。 ⑥非静态成员函数可以访问任意的静态成员变量和静态成员函数。 ⑦同样受访问限定符限制
友元
提供了一种突破类访问限定符的封装来访问的方式在声明前加friend修饰友元分为友元函数、友元类。
特点
①友元函数可以访问类的私有和保护成员但他只是声明不是类的成员函数而是外部函数。 ②友元可以在类的任何位置声明不受访问限定符的限制。 ③一个类中友元类的成员函数也是该类的友元函数。 ④一个函数可以是多个类的友元函数。 ⑤不具有交换性和传递性。比如A是B的友元但是B不是A的友元A是B的友元B是C的友元但是A不是C的友元。 ⑥友元会破坏封装所以不适宜多用。 ❤~~本文完结感谢观看接下来更精彩欢迎来我博客做客~~❤