C++中关于重载默认构造函数与默认全部参数的构造函数的使用注意
# include<iostream>
using namespace std;
class Time
{
public: //公用成员函数
Time() //默认构造函数
{
hour=13;
minute=25;
sec=46;
}
Time(int s,int h=10,int m=52)
{
hour=h;
minute=m;
sec=s;
}
// Time(int h,int m,int s):hour(h),minute(m),sec(s){};//重载构造函数,运行时会根据形参的不同,自动匹配调用(类的初始化数据成员的另一种方法:参数初始化列表)
void set_time();
void show_time(); //私有成员数据
private:
int hour;
int minute;
int sec;
};
void Time::set_time()
{
cin>>hour;
cin>>minute;
cin>>sec;
}
void Time::show_time()
{
cout<<hour<<":";
cout<<minute<<":";
cout<<sec<<endl;
}
int main()
{
Time t1(12,13,16);
t1.show_time();
t1.set_time();
t1.show_time();
Time t2;
t2.show_time();
Time t3(23);
t3.show_time();
Time t4(23,15);
t4.show_time();
return 0;
}
在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。例:
Box(int =10,int =10,int =10); 1
Box(); 2
Box(int,int); 3
若有以下定义语句:
Box box1; //是调用上面的第一个默认参数的构造函数,还是第二个默认构造函数
Box box2(15,30); //是调用上面的第一个默认参数的构造函数,还是第三个构造函数
所谓默认构造函数,就是调用构造函数时,不必给出实参的构造函数。
第2个构造函数是最基本,最原始的构造函数;第1个就是形参都已默认,指定了的构造函数,调用时实参可以传过去1个,2个,3个,甚至0个数据。
比如,第一个语句:Box box1;我们可以认为他是直接调用第2个构造函数,也可以认为他是调用了第1个构造函数,只不过没有实参传递过去而已,这样就产生了歧义。
同理,第二个语句,我们可以理解为它调用了第3 个构造函数。但同时,理解为它调用第1个构造函数,只不过仅传过去2个实参,也是可是说得通的。这也就产生了歧义。
事实上,上面3个函数中任意一个都可以说是另两个的重载函数,那么“在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数”就很好容易理解了
C++中关于重载默认构造函数与默认全部参数的构造函数的使用注意的更多相关文章
- [转载] C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?
#include "stdafx.h" class A { public: A(){ax = ;}; A(int a){ax = a;}; int ax; }; class B { ...
- C++ 构造函数放置默认转换explicit关键字(2)
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p ); ...
- C++中的重载隐藏覆盖&&JAVA中的重载覆盖&&多态
class 类继承默认是private, struct 默认继承是public C++中的隐藏: 只要派生类中出现和基类一样的函数名,基类中的函数就会被派生类中的函数给隐藏(如果派生类和基类中的函数名 ...
- mfc 带参数的构造函数
知识点 默认的构造函数 带参数的构造函数 重载构造函数 一.默认的构造函数 二.带参数的构造函数 三.重载构造函数 class Tdate { public: int year;//年 int mon ...
- 在Spring的Bean注入中,即使你私有化构造函数,默认他还是会去调用你的私有构造函数去实例化
在Spring的Bean注入中,即使你私有化构造函数,默认他还是会去调用你的私有构造函数去实例化. 如果我们想保证实例的单一性,就要在定义<bean>时加上factory-method=” ...
- C++:构造函数的默认参数知识拓展
和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值. 例9.3的问题也可以使用包含默认参数的构造函数来处理. [例9 ...
- 2.9 C++使用默认参数的构造函数
总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...
- C++使用默认参数的构造函数
我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常老的书,为了尽快清空库存,店主想了一下,决定开展一个大甩卖活动,所有的这些书全部以五美元的价格出售.此时如果需要尽快将这些书的信息录入到书 ...
- C++ 构造函数与默认构造函数
构造函数:C++用于构建类的新对象时需要调用的函数,该函数无返回类型!(注意:是“无”! 不是空!(void)). 默认构造函数:未提供显式初始值时,用来穿件对象的构造函数. 以上是二者的定义,但是单 ...
随机推荐
- ios发送邮件
方法一: 1.需要引入库MessageUI.framework #import <MessageUI/MessageUI.h> #import<MessageUI/MFMailCom ...
- Spring中各jar包的作用
Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects:Spring提供的对AspectJ框架的整合 Spring Beans:Spring ...
- Luogu P2966 [USACO09DEC]牛收费路径Cow Toll Paths
题目描述 Like everyone else, FJ is always thinking up ways to increase his revenue. To this end, he has ...
- Markdown公式编辑
一.公式使用参考 1.如何插入公式 行中公式(放在文中与其它文字混编)可以用如下方法表示:$ 数学公式 $ 独立公式可以用如下方法表示:$$ 数学公式 $$ 自动编号的公式可以用如下方法表示: 若需要 ...
- python学习之字符串(上)
字符串python 的字符串被划归为不可变序列这一类别,意味着这些字符串所包含的字符存在从左至右的位置顺序,并且他们不可以在原处修改. 字符串常量单引号 'spam'双引号 "spam& ...
- hashlib,configparser,logging模块
一.常用模块二 hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...
- Razor语法问题(foreach里面嵌套if)
报错: @foreach (var item in ViewBag.TopList) { if (!string.IsNullOrWhiteSpace(item.LogoPic_Mobile)) &l ...
- Could not establish trust relationship for the SSL/TLS secure channel 问题解决方法
最近在写一个跟第三方对接的数据同步服务,在本地都没有问题,今天放到生产环境测试报错: System.Net.WebException: The underlying connection was cl ...
- 关于android appcompatv7 Menu items should specify a title的解决办法
做安卓开发时,添加menu时 是AS报以下错误: 解决办法为修改如下: <menu xmlns:android="http://schemas.android.com/apk/res/ ...
- MySQL GROUP BY多个字段分组用法详解
mysql语句中group by 很容易理解 是分组查询.比如 select sum(score) from user group by name 意思是查询每个人的分数总和但是, select su ...