第三章 类与对象进阶
2020-04-04 16:01:40来源:博客园 阅读 ()
第三章 类与对象进阶
目录
- this指针
- 静态成员变量&函数
- 成员对象与封闭类
- 常量成员对象&常量成员函数
- 友元
this指针
- **定义: ** 非静态成员函数指向调用该函数的对象的指针
- 非静态成员函数隐含
this
指针参数 - 静态成员函数不针对某个对象,所以不包含this指针
静态成员变量&函数
-
静态成员变量&静态成员函数本质上是全局变量,与该类有关,但不与调用它的对象直接相关
-
即使没有创建对象,静态成员也存在,被所有对象共享
-
调用方法
- 类名::静态成员名
- 对象.静态成员
- 对象指针->静态成员
- 对象引用.静态成员
-
静态变量必须声明或初始化,否则链接时会报错
-
静态成员函数内不可使用非静态成员变量及非静态成员函数
#include <iostream> using namespace std; class Rectangle{ private: int w,h; static int TotalArea,TotalNum; public: Rectangle(int w_,int h_):w(w_),h(h_){ TotalNum++; TotalArea+=w*h; } Rectangle(Rectangle &r){ w=r.w; h=r.h; TotalNum++; TotalArea+=w*h; } ~Rectangle(){ TotalNum--; TotalArea-=w*h; } static void PrintTotal(){ cout<<TotalNum<<", "<<TotalArea<<endl; } }; int Rectangle::TotalNum; //必须对类的静态变量进行声明或初始化, int Rectangle::TotalArea; //否则链接不通过 int main(){ Rectangle a(2,2),b(4,5); Rectangle::PrintTotal(); a.PrintTotal(); //结果与对象a无关 return 0; }
成员对象与封闭类
- 封闭类:包含成员对象(类)的类
- 初始化顺序:成员对象先构造,然后才是封闭类[1];成员对象构造顺序依照封闭类中成员对象声明顺序
- 析构顺序:封闭类先析构,然后是成员对象[2]
常量成员对象&常量成员函数
-
常量成员对象:成员对象前面加
const
关键字,初始化后便不能改变值 -
常量对象只能调用常量成员函数
-
常量成员函数:成员函数后面加上
const
关键字,保证调用对象值在函数中不会被改变 -
常量成员函数内不能改变成员变量值(静态成员对象除外),不能调用同类非常量成员函数[3] (静态成员函数除外)
-
常引用:保证引用参数在函数运行中值不被改变
void func(const Stu &a)const{}
友元
- 分类: 友元函数、友元类
- 友元不属于对象成员,但能够访问对象的私有private成员&保护protected成员
- 友元关系不能传递,不能继承[4]
因为封闭类构造时可能用到成员对象 ??
先构造的后析构 ??
因为非常量成员函数可能改变成员变量值 ??
不能传递指:如果A是B的友元,B是C的友元,不能推导出A是C的友元 ??
原文链接:https://www.cnblogs.com/DreamEagle/p/12632003.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:c++中的多态机制
下一篇:第二章 类和对象基础
- C++ 对象的初始化和赋值 2020-06-03
- C++ 析构函数 2020-06-03
- 使用错误代码对象进行C++错误处理 2020-04-10
- 类的使用(类和对象,构造函数和析构函数) 2020-04-05
- 第二章 类和对象基础 2020-04-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash