12.C++-构造与析构函数的调用,const成员函数,con…
2018-06-17 21:01:21来源:未知 阅读 ()
单个对象创建时,构造函数的调用顺序
1.首先判断该对象的类是否拥有父类,若有则先调用父类的构造函数
2.判断该对象的成员是否是其它类的成员,若是则调用成员变量的构造函数(调用顺序和声明顺序相同)
3.最后调用对象本身类的构造函数
单个对象被注销后,调用的析构函数与对应构造函数的调用顺序相反
参考下面示例,创建两个类Member,Test,然后Tesrt成员包含了Member类的成员:
#include <stdio.h> class Member { const char* ms; public: Member(const char* s) { printf("Member(const char* s): %s\n", s); ms = s; } ~Member() { printf("~Member(): %s\n", ms); } }; class Test { Member mA; Member mB; public: Test() : mB("mB"), mA("mA") { printf("Test()\n"); } ~Test() { printf("~Test()\n"); } }; Member gA("gA"); int main() { Test t; return 0; }
运行打印:
Member(const char* s): gA Member(const char* s): mA Member(const char* s): mB Test() ~Test() ~Member(): mB ~Member(): mA ~Member(): gA
const成员函数
为了体现对象的封装性,C++在类里引入了const成员函数
- cosnt成员函数里只能调用const成员函数
- const成员函数中不能直接修改成员变量的值
- 只有对mutable修饰的成员变量, const成员函数是可以修改的
- 如果用const修饰的函数,那么该函数一定是类的成员函数
const成员函数定义,是在函数声明最右侧带上const关键字,例如:
class Test{ pbulic: int func(void) const; } int Test::func(void) const { }
const对象
- const对象的成员变量不允许被改变,
- const对象只能调用const成员函数,而非const对象可以访问const成员函数
- const对象是编译阶段的概念,运行时无效
const对象定义,是在对象声明最左侧带上const关键字,例如:
class Test{ pbulic: int func(void) const; } int Test::func(void) const { } const Test t;
this指针
大家都知道,每个对象的成员变量都是不同的,而成员函数只有一个,是共享的,存在text代码段里.
为了知道当前是调用哪个对象的成员函数,所以,C++里有个隐藏的this指针,它永远指向当前对象
当我们调用成员函数时,若函数参数和成员变量一样,我们就可以直接使用this指针来代替当前对象,比如:
#include "stdio.h" class Test{ private: int x; int y; public: Test(int x,int y) { this->x =x; //通过this指针,找到对象 this->y =y; //通过this指针,找到对象 } }; int main() { Test t1(1,3); return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:我的C++学习之旅
下一篇:C++ 数组、二维数组、函数参数
- C++ 析构函数 2020-06-03
- C++ 构造函数 2020-06-03
- 定位new表达式与显式调用析构函数 2020-04-20
- 类的使用(类和对象,构造函数和析构函数) 2020-04-05
- c++-虚析构函数 2019-12-22
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