12.C++-构造函数与析构函数调用顺序,const成员函数,const对象
单个对象创建时,构造函数的调用顺序
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(,);
return ;
}
12.C++-构造函数与析构函数调用顺序,const成员函数,const对象的更多相关文章
- C++类的继承中构造函数和析构函数调用顺序例子
/*当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止.简而言之,对象是由“底层向上”开始构造的.因为,构造函数 ...
- c++深/浅拷贝 && 构造函数析构函数调用顺序练习题
1.深/浅拷贝 编译器为我们提供的合成拷贝构造函数以及合成的拷贝赋值运算符都是浅拷贝.浅拷贝只是做简单的复制,如果在类的构造函数中new出了内存,浅拷贝只会简单的复制一份指向该内存的指针,而不会再开辟 ...
- C++单继承的构造函数和析构函数调用的顺序
1.继承构造函数调用顺序以及销毁的过程 先调用父类的构造函数,在调用子类的构造函数,析构函数调用相反.
- C++构造函数和析构函数调用虚函数时都不会使用动态联编
先看一个例子: #include <iostream> using namespace std; class A{ public: A() { show(); } virtual void ...
- C++类的const成员函数、默认的构造函数、复制形参调用函数(转)
C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...
- 拷贝构造函数和const成员函数
实验原因 说明如何使用const描述保护类数据不会意外修改. 编译环境 vc6sp6 + win7x64 工程下载 copyConstruction_constMemberFunction.zip ...
- c++ 学习之const专题之const成员函数
一些成员函数改变对象,一些成员函数不改变对象. 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: ...
- C++ Const成员函数
一些成员函数改变对象,一些成员函数不改变对象. 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象 ...
- c++中的const参数,const变量,const指针,const对象,以及const成员函数
const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whe ...
随机推荐
- shell 颜色控制系列
shell脚本里,经常用的颜色控制,如下 格式:echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" eg:echo -e "\033[41;36m ...
- 在mac上安装Docker
1.进入一下地址进行下载docker https://download.docker.com/mac/stable/Docker.dmg 进入后进行下载后进行安装 2.将其拖动到Appliaction ...
- PHP的性能优化方法总结
什么情况之下,会遇到PHP性能问题? 1:PHP语法使用不恰当. 2:使用PHP语言做了它不擅长的事情. 3:使用PHP语言连接的服务不给力. 4:PHP自身的短板(PHP自身做不了的事情). 5:我 ...
- 来了解并防范一下CSRF攻击提高网站安全
看一下我从网上找的原理图,结合举例描述,多看一遍你就知道怎么回事了. CSRF是什么呢?CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具 ...
- Egret学习笔记 (Egret打飞机-6.实现敌机飞起来)
有了子弹,总得有敌人来打吧,不然游戏有啥意思呢?今天我们来实现敌机从屏幕上边往下飞 参考微信打飞机游戏里面,敌机分为3种 1是特小飞机,2是小飞机,还有一种就是大飞机 面向对象编程提倡抽象,实现代码复 ...
- python模拟登录浙江大学彩云库
前言: 群里一位朋友叫我帮他写 一个模拟登录的. 代码: import requests import time url="http://yk3.gokuai.com/web/index&q ...
- (转载)SVM-基础(三)
支持向量机: Kernel by pluskid, on 2010-09-11, in Machine Learning 70 comments 本文是"支持向量机系列" ...
- Jetty添加Filter过滤器
1.Jetty嵌入到Spring项目 try { Server server = new Server(8080); WebAppContext context = new WebAppContext ...
- 关于chrom开发者工具priview和respons 数据内容不一致问题
在昨天晚上2017年8月24日,深夜升级的时候发现你了一个问题:简单的把问题描述一下:新增的一个付款单中的金额为最大值9999999999999999 ,但是保存后返回来的却是100000000000 ...
- R-CNN算法概要
参考论文:Rich feature hierarchies for accurate object detection and semantic segmentation 下载地址:https://a ...