C++基本语法

2023-11-12

C++中构造函数的调用:

class Type

{

}

 

void main()

{

 Type obj;  //ok,编译器调用了默认的构造函数

 Type obj1=Type();  //ok,显示调用了默认的构造函数

Type obj3();                //error ,其是声明了一个无参并返回Type类对象的函数obj

}

构造函数和析构函数都不参与继承。

 

this指针:

看一看编译器是怎样实现 this 指针的 为支持 this 指针,必须要应用两个转变
1 改变类成员函数的定义 用额外的参数 this 指针 来定义每个成员函数 例如
// 伪代码, 说明编译器对一个成员函数定义的展开形式
// 不是合法的 C++ 代码
inline void move( Screen* this, int r, int c )
{
if ( checkRange( r, c ) )
{
int row = (r-1) * this->_width;
this->_cursor = row + c - 1;
}
}
在这个成员函数定义中 显式使用 this 指针来访问类数据成员_width 和_cursor
2 改变每个类成员函数的调用 加上一个额外的实参——被调用对象的地址 例如

myScreen.move( 2, 2)
被转化为
move( &myScreen, 2, 2 )

 

 

静态类成员:

一般地 ,静态数据成员在该类定义之外被初始化 。如同一个成员函数被定义在类定义之外一样, 在这种定义中的静态成员的名字必须被其类名限定修饰  例如 下面是 interestRate
的初始化
// 静态类成员的显式初始化
#include "account.h"  //存放Account类定义的地方
double Account::_interestRate = 0.0589;

与全局对象一样 对于静态数据成员 在程序中也只能提供一个定义 这意味着 静态数据成员的初始化(类似于成员函数在类外的定义)不应该被放在头文件中 而应该放在含有类的非 inline 函数定义的文件中
静态数据成员可以被声明为任意类型 它们可以是 const 对象 数组或类对象等等 例如
#include <string>
class Account {
// ...
private:
static const string name;
};
const string Account::name( "Savings Account" );
作为特例 有序型的 const 静态数据成员可以在类体中用一常量值初始化 例如 如果
决定用一个字符数组而不是 string 来存储账户的姓名 那么我们可以用 int 型的 const 数据成
员指定该数组的长度 例如
// 头文件
class Account {
// ...
private:
static const int nameSize = 16;
static const char name[nameSize];
};
// 文本文件
const int Account::nameSize; // 必需的成员定义
const char Account::name[nameSize] = "Savings Account";
关于这个特例 有一些有趣的事情值得注意 用常量值作初始化的有序类型的 const 静态数据成员是一个常量表达式 constant expression 如果需要在类体中使用这个被命名的
值 那么 类设计者可声明这样的静态数据成员 例如 因为 const 静态数据成员 nameSize是一个常量表达式 所以类的设计者可以用它来指定数组数据成员 name 的长度
在类体内初始化一个 const 静态数据成员时 该成员必须仍然要被定义在类定义之外 但是 因为这个静态数据成员的初始值是在类体中指定的 所以在类定义之外的定义不能指定初始值
因为 name 是一个数组 不是有序类型 所以它不能在类体内被初始化 任何试图这
么做的行为都会导致编译时刻错误 例如
class Account {
// ...
private:
static const int nameSize = 16; // ok: 有序类型
static const char name[nameSize] =
"Savings Account"; // 错误
};
name 必须在类定义之外被初始化
这个例子还说明了一点 我们注意到成员 nameSize 指定了数组 name 的长度 而数组 name
的定义出现在类定义之外
const char Account::name[nameSize] = "Savings Account";
nameSize 没有被类名 Account 限定修饰 尽管 nameSize 是私有成员 但是 name 的定义仍没有错 怎么会这样 如同类成员函数的定义可以引用类的私有成员一样 静态数据成员的定义也可以 静态数据成员 name 的定义是在它的类的域内 当限定修饰名 Account::name被看到之后 它就可以引用 Account 的私有数据成员

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++基本语法 的相关文章

随机推荐

  • Apache Hive基础

    Apache Hive基础 Hive优势 提供了一个简单的优化模型 HQL类SQL语法 简化MR开发 支持在不同的计算框架上运行 支持在HDFS和HBase上临时查询数据 支持用户自定义函数 格式 成熟的JDBC和ODBC驱动程序 用于ET
  • matlab如何预测数据,matlab预测数据

    基于MATLAB 的人口预测模型 摘要 本文以 1980 2014 年中国年终总人口数据资料为依据 分别使用了一次拟合 灰色预 测模型和时间序列模型进行拟合 最终得出时间序列模型 基于MATLAB 的人口预测方法分析 易亮 摘要 摘要 本文
  • Android Looper Handler 机制浅析

    最近想写个播放器demo 里面要用到 Looper Handler 看了很多资料都没能理解透彻 于是决定自己看看相关的源码 并在此记录心得体会 希望能够帮助到有需要的人 本文会以 猜想 log验证 的方式来学习 Android Looper
  • java 执行bat文件

    Java代码 cmd c dir 是执行完dir命令后关闭命令窗口 RequestMapping a ResponseBody public Object a String command cmd c D Users qwer Deskto
  • 基于51单片机的自动浇花浇水系统LCD1602显示仿真

    硬件设计 基本框架 该电路的工作原理是由STC89C52单片机和ADC0832组成系统的核心部分 湿度传感器将采集到的数据直接传送到ADC0832的IN端作为输入的模拟信号 选用湿度传感器和AD转换 电路内部包含有湿度采集 AD转换 单片机
  • 7-3 谁是赢家

    7 3 谁是赢家 某电视台的娱乐节目有个表演评审环节 每次安排两位艺人表演 他们的胜负由观众投票和 3 名评委投票两部分共同决定 规则为 如果一位艺人的观众票数高 且得到至少 1 名评委的认可 该艺人就胜出 或艺人的观众票数低 但得到全部评
  • vue 图片,视频点击预览按钮方法

    图片 使用el image viewer组件 写之前注意引入安装组件 主要代码 div class div
  • opencv之初学第3天

    opencv学习第三天 今天学习一下灰度变换 我对图像不是太了解 我还特地学了一下灰度变换与像素的区别 像素 灰度 RGB 分辨率 y xxiii的博客 CSDN博客 像素值和rgb的关系 先来梳理一下不太懂的知识点 1 关于cvtColo
  • Windows下安装zerotier,网络状态提示PORT_ERROR错误解决

    ZeroTier是一款基于P2P的内网穿透工具 支持多客户端 手机电脑可以互通互联 最近为方便nas操作 在电脑上部署安装 结果踩坑 在Windows下使用zerotier时提示PORT ERROR错误 最初以为是端口被屏蔽 关闭防火墙 发
  • 【转】DevOps的前世今生

    目前在国外 互联网巨头如Google Facebook Amazon LinkedIn Netflix Airbnb 传统软件公司如Adobe IBM Microsoft SAP等 亦或是网络业务非核心企业如苹果 沃尔玛 索尼影视娱乐 星巴
  • [bx]和loop指令

    1 bx 的含义 bx 表示一个内存单元 它的偏移地址在bx中 比如 mov ax bx 会将一个内存单元的内容送入ax 这个内存单元的长度是2个字节 存放一个字 偏移地址存放在bx中 段地址在ds中 mov al bx 则是移动半个字 2
  • openGL API glDeleteSamplers中文翻译

    openGL API glDeleteSamplers中文翻译 先放上英文 后面是中文翻译 Name glDeleteSamplers delete named sampler objects C Specification void gl
  • windows server 2003 永恒之蓝(MS17-010)漏洞复现

    目录 永恒之蓝 概述 防护方式 复现 复现工具 复现过程 侦测部分 用于侦测靶机是否具有ms17 010漏洞 攻击部分 永恒之蓝 概述 永恒之蓝是指2017年4月14日晚 黑客团体Shadow Brokers 影子经纪人 公布一大批网络攻击
  • ImportError: cannot import name 'json_util' from 'bson'

    最近使用bson的json util时出现错误 错误提示如下 ImportError cannot import name json util from bson OR ImportError No module named bson js
  • 面试总结(JavaWeb后端工程师三年面试问题,附答案!)

    笔者在今年上半年辞职了 陆陆续续面试了一些互联网公司 一起来看看这些公司都问的些什么面试题吧 一 Spring MVC和Spring boot有啥区别 1 Spring MVC和Spring Boot都是Spring的一部分 且两者都是由I
  • 刷脸支付条赛道上支付宝遥遥领先

    社会经济在快速发展 而身边所携带的现金却在慢慢减少 很多人甚至出门都不带现金 尤其是早晨着急上班的时候 在地铁口附近买包子需要付款时 手中无现金 拿出手机又嫌麻烦 刷脸似乎更为便捷 于是乎 脸就变得越来越值钱 靠脸吃饭不再仅仅局限于偶像明星
  • 【jar包】java -jar 启动服务,断开服务器连接或者关闭窗口后,服务停止

    解决办法 nohup java jar XXX jar gt log file 最后的 在后台运行 只能避免打断后程序停止 无法避免关闭当前窗口 最前面的nohup 不挂断运行命令 当账户退出或终端关闭时 程序仍然运行 输出到log fil
  • 服装行业多模态算法个性化产品定制方案

    一 项目背景 AI赋能服装设计师 设计好看 好穿 好卖的服装 传统服装行业痛点 设计师无法准确捕捉市场趋势 抓住中国潮流 上新周期长 高库存滞销风险大 基本款居多 难以满足消费者个性化需求 解决方案 GPT 数据洞察 快速反应市场时尚流行趋
  • pycharm安装2021最新详细教程小白入门

    一 官网下载安装包 Pycharm的官网 https www python org 这个链接进去直接是下载界面 https www jetbrains com pycharm download 1 专业版 Professional 是收费的
  • C++基本语法

    C 中构造函数的调用 class Type void main Type obj ok 编译器调用了默认的构造函数 Type obj1 Type ok 显示调用了默认的构造函数 Type obj3 error 其是声明了一个无参并返回Typ