C++类的构造函数及操作符()重载
昨天看到一个提问帖子问到一个有关构造函数的问题,问题意思如下:
定义一个class Cat,然后创建实例,发现Cat frisky和Cat frisky()两种方式表现不一。
我用vs调试了一下
#include <iostream>class Cat{
public:Cat(){std::cout << "default-constructor" << std::endl;}Cat(int i){std::cout << "new-constructor" << std::endl;}void operator ()(){std::cout << "operator-void" << std::endl;}void operator ()(int i){std::cout << "operator-int" << std::endl;}~Cat(){std::cout << "destructor" << std::endl;}
};void test()
{Cat(); // "default-constructor destructor"Cat(1); // "new-constructor destructor"Cat a; // "default-constructor"a(); // "operator-void"a(1); // "operator-int"Cat b(); // * do nothingCat c(1); // "new-constructor"c(); // "operator-void"c(1); // "operator-int"Cat d = Cat(); // 同 ad();d(1);Cat e = Cat(1); // 同 ce();e(1);
}int main(int argc, char **argv)
{test();return 0;
}
发现"Cat b();"这一句压根就没走到,单步调试直接跳过了,感觉是被编译器干掉了。难道是C++允许这种写法,但却又是无效的代码,与其这样,为什么不直接在编译期间就报错呢?具体原因我也说不上来,希望有个明白人解释一下。
C++类的构造函数及操作符()重载相关推荐
- C#构造函数、操作符重载以及自定义类型转换
构造器 构造器(构造函数)是将类型的实例初始化的特殊方法.构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容. 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化.如果类没有显示 ...
- 类与对象:类的6个默认成员函数: 构造函数、析构函数、拷贝构造函数、赋值操作符重载、默认拷贝构造与赋值运算符重载的问题、const成员函数、 取地址及const取地址操作符重载
1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类.任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数. 构造函数 析构函数 拷贝构造函数 赋值操作符重载 const成员函数 ...
- C/C++ 之 操作符重载
1.成员函数重载操作符:除".","*","::","?:"外其他操作符都可重载 (1) a.双目操作符声明格式: cl ...
- C++基础11-类和对象之操作符重载1
总结: 1.运算符重载的本质是函数重载 2.运算符重载可分为成员函数重载和全局函数重载(差一个参数) 3.运算符重载函数的参数至少有一个是类对象(或类对象的引用) 4.不可以被重载的操作符有:成员选择 ...
- C#中如何利用操作符重载和转换操作符
操作符重载 有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成 ...
- C++——构造函数(拷贝构造,拷贝复制),析构函数,操作符重载
C++--构造函数(拷贝构造,拷贝复制),析构函数,操作符重载 构造函数与析构函数:: 涉及构造函数还可以看这篇文章C++搞懂深拷贝初始化=与赋值=的区别 1.声明和定义构造函数和析构函数 构造函数在 ...
- C++ 类和对象(二):构造函数、析构函数、拷贝构造函数、运算符重载
构造函数 析构函数 拷贝构造函数 运算符重载 class Date {}; 可以看到,上面那个类没有任何成员,是一个空类,但是它真的什么都没有吗?其实一个类在我们不写的情况下,都会生成6个默认的成员函 ...
- 拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载...
2019独角兽企业重金招聘Python工程师标准>>> 在我们学习C++的过程中,我们难免会遇到类,在类中有6个默认的函数,它们分别为:构造函数.拷贝构造函数.析构函数.赋值操作符重 ...
- c++操作符重载,拷贝构造函数和友…
操作符重载 把c++的操作符在自己的新函数中重新实现就是操作符重载. 可以在类里面以成员函数的方式重载某个操作符,也可以在某个名字空间中重载操作符. ------------------------- ...
- 【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载
1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std;clas ...
最新文章
- python使用os和shutil模块进行文件创建,删除,移动,复制,重命名
- nginx反向代理tomcat
- 记一次 .NET 医院CIS系统 内存溢出分析
- 【Day12】整个前端性能提升大致分几类
- Electron 遭封杀,Web 开发者在苹果平台上举步维艰!
- badboy + jmeter并发性能测试
- Arp病毒专杀工具下载及其防治解决方案
- 快速求实对称矩阵特征向量的技巧
- IDEA修改Jsp模板
- Verilog 任意分频器设计
- java中的打印_java中使用打印的方法
- 标题中冒号的用法_英文中冒号的各种用法
- 解决​excel里一复制就卡死的经验分享【转】
- 有关git commit --amend的用法及若干个问题
- loj10099 矿场搭建
- 关于通过邮箱找回密码的实现
- 前端开发人员的精彩文字
- html5个人影集,全屏的个人影集展示网页模板
- 工信部、公安部、交通部:拟将自动驾驶汽车道路测试及示范应用范围拓宽至高速公路...
- 机房温度可视化:物联网下的数据中心环境运维新方式