day3:
1C++关键字
定义:关键字又称为保留字,是整个语言范围预先保留定义的标识符,每一个C++关 键字都有特殊的涵义 73关键字
1.1static关键字
作用:用来修饰类中的成员变量和成员函数,被修饰的成员变量和成员函数 属于整个类,而不属于某个对象,该类的所有对象共享使用该静态成员。
1.1.1静态成员变量
用static修饰的类中成员变量,该变量就是静态成员变量
特点:1 静态成员变量被当作类的成员,由该类的所有对象访问,对于该类 的所有对象来说,静态成员变量只会分配一次内存。
2 静态成员变量的数据存贮在全局数据区,它在定义时分配内存空间 ,所以不能在类声明中定义,而是在main函数外和类外定义, 并且定义时要加类名这个作用域
demo::ival;obj.ival
1.1.2静态成员函数
用static修饰的类中的成员函数,该函数就是静态成员函数
特点:1 静态成员函数可以通过类名::函数名()的方式调用,还可以通过对 象名.函数名()方式调用
2 静态成员函数没有this指针(this指针指代当前对象首地址,静态 成员函数属于整个类,不属于某个对象,所以没有this指针)
总结:1 非静态成员函数可以访问静态成员变量和非静态成员变量
2 静态成员函数只能访问静态成员变量,不能访问非静态成员变量
1.2const关键字
const修饰的目标能受到c/c++编译器的类型安全检查机制的强制保护, 防止目标被意外修改。
1.2.1const成员变量
const修饰成员变量,被修饰的成员变量称为常成员变量,该成员变量只 能通过初始化列表方式初始化,而且一旦被初始化后其值不能被修改(只能 读不能写)
1.2.2const成员函数
const修饰成员函数,放在函数名后边,被修饰的函数称为常成员函数, 常成员函数不能修改任何成员变量的值
1.2.2const对象
const修饰的类对象称为常对象,常对象的所有成员都变成了只读的
常对象只能访问常成员函数,不能访问非常成员函数
1.2.2const对象指针
const修饰的类对象指针称为常对象指针
常对象指针只能访问常成员函数,不能访问非常成员函数
1.2.2const对象引用
const修饰的类对象引用称为常对象引用
常对象引用只能访问常成员函数,不能访问非常成员函数
1.3mutable关键字
作用:使成员变量不受const的约束(const成员函数和const对象能修 改成员变量的值)
2友元
定义:通俗的说,就是类的好朋友,友元可以访问类的私有成员。
友元关系:就是一个类主动声明那些其他函数或者其他类是它的朋友,进而给他们提供访问本类成员的权限。也就是说,通过友元关系,一个普通函数或类或类中的某个成员函数可以访问封装与当前类的私有和保护成员。
友元种类:1 友元函数(友元外部函数、友元成员函数)
2 友元类
2.1友元外部函数
定义:是外部函数,没有this指针,该友元函数可以访问当前类的私有和保 护成员
如何声明一个外部函数是当前类的友元函数?在类中声明函数前加 friend关键字:friend 函数名();
注:友元外部函数的入参有一个必须是对象的引用
void func(demo &obj)
2.2友元成员函数
定义:声明另外一个类的某个成员函数是当前类的友元,则该成员函数可以 访问当前类的私有和保护成员
如何声明另外一个类的某个成员函数是当前类的友元函数?
friend 类名::函数名();
若A类中的某个成员函数是B类的友元,只有这个成员函数可以访问B类的私 有成员
2.3友元类
定义:声明另外一个类是当前类的友元,另外一个类的所有成员函数都可以 访问当前类的私有和保护成员
如何声明?friend class 类名;
若B类为A类的友元类,则B类中的所有成员函数都是A类的友元函数,都可 以访问A类中的私有和保护成员
特点:友元关系是单向的
友元关系是不能传递的
友元关系是不能通过赋值实现的(声明)
友元破坏了类的封装性,需谨慎使用
3 运算符重载 class demo obj1; class demo obj2;obj1+obj2;
为什么要进行运算符重载?
1 运算符只对基本数据类型有效,对自定义的数据类型无效,如果对象之 间要进行运算,必须进行运算符重载
2 进行运算符重载可以使对象间的运算变的简单、直观、方便
如何实现运算符重载?可以用运算符重载函数来实现。
运算符重载函数的格式:返回值类型 operator 要重载的运算符(形参列表)
{对象的运算}
+ - * / += -= != ! << >>
可以实现运算符重载的函数?
1 类中的成员函数;有this指针
2 类的友元函数;没有this指针,所以运算符重载时参数会比成员多一个
总结:1 不能实现运算符重载的运算符有:“.” "?:" "::" sizeof ..
2运算符重载不能改变原运算符的优先级和含义
day3作业
1 用成员函数实现 -= >> ++ 的运算符重载函数
2 练习今日所有代码
3 预习模板