C++问题为什么组策略阻止了这个程序序会显示类CPU没有默认的构造函数,还有错误该如何解决?

C++ 类里德构造函数调用错误这里的Other为什么会被调用【c++吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:290,557贴子:
C++ 类里德构造函数调用错误这里的Other为什么会被调用收藏
#include &iostream&class Other{public:
cout && "Other::Other" &&
cout && "~Other::Other" &&
}};class Point
Point(int xx=0, intyy=0) : X(xx), Y(yy)
cout && "Point::Point" &&
cout && "Point::~Point" &&
void Move(int xOff, int yOff)
int GetX()
int GetY()
//私有数据成员
Other o1;};//派生类声明class Rectangle: public Point{public:
Rectangle(int xx, int yy, int ww, int hh) :
Point(xx, yy), W(ww), H(hh)
cout && "Rectangle::Rectangle" &&
~Rectangle()
cout && "Rectangle::~Rectangle" &&
int GetH()
int GetW()
}private: //新增私有数据成员
int W, H;};intmain(){
Rectangle rect(2, 3, 20, 10);
rect.Move(3, 2);
cout&&rect.GetX()&&','&&rect.GetY()&&','
&&rect.GetW()&&','&&rect.GetH()&&
return 0;}
登录百度帐号推荐应用C++编程 如何正确理解C++默认构造函数_C/C++_无忧考网
C++编程 如何正确理解C++默认构造函数
18:05 来源:网络综合
C/C++网权威发布C++编程 如何正确理解C++默认构造函数,更多C++编程 如何正确理解C++默认构造函数相关信息请访问C/C++网。
【导语】C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。无忧考网为大家准备了《C++编程 如何正确理解C++默认构造函数》,供大家参考。对于C++默认构造函数,我曾经有两点误解:类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数。合成默认构造函数会初始化类中所有的数据成员。第一个误解来自于我学习C++的第一本书 《C++ Primer》,在书中392页:“只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数”。实际上这句话也没有说错,它说明了默认构造函数定义的必要非充分条件,然而却给当时初学C++的我造成了一定的误解。第二个误解依旧来自于Primer中的一句话:“合成的默认构造函数使用与变量初始化相同的规则来初始化成员。具有类类型的成员通过运行各自的默认构造函数来进行初始化”。然而这也是我理解的片面,因为Primer也说到了:“如果类包含内置或复合类型的成员,则该类不应该依赖于合成的默认构造函数”,言下之意就是合成的默认构造函数并不会初始化内置或复合类型的成员。总结了我有这些误解的原因,第一是初学时知识体系没形成,对Primer中所说的内容没有真正的理解,第二就是Primer在某种程度上的确不是C++初学者能看懂的书,或许看时觉得懂了,却是遗漏了很多知识。也说明了Primer 是座宝库,常常回顾将会有新的感悟。让我对上面两个观点产生疑惑,是在看《Effective C++》时,条款05《了解C++默认编写并调用哪些函数》中说到“….惟有当这些函数被需要(被调用),它们才会被编译器创建出来。” (“这些函数“指的是编译器版本的复制构造函数、赋值操作符和析构函数,还包括了默认构造函数。)也就是说,默认构造函数“被需要”的时候编译器才会帮我们合成,那什么情况才是默认构造函数”被需要“呢?这个问题《Effective C++》并没有给出答案,直到看了《深度探索C++对象模型》,才明白了编译器何时才会帮我们合成一个默认构造函数。我写这篇文章的目的是给和我有同样误解或疑惑的C++初学者看的,如果你对合成默认构造函数已有充分的认识,请忽略本文的内容。正文什么是默认构造函数?默认构造函数是可以不用实参进行调用的构造函数,它包括了以下两种情况:没有带明显形参的构造函数。提供了默认实参的构造函数。类设计者可以自己写一个默认构造函数。编译器帮我们写的默认构造函数,称为“合成的默认构造函数”。强调“没有带明显形参”的原因是,编译器总是会为我们的构造函数形参表插入一个隐含的this指针,所以”本质上”是没有不带形参的构造函数的,只有不带明显形参的构造函数,它就是默认构造函数。默认构造函数什么时候被调用?如果定义一个对象时没有提供初始化式,就使用默认构造函数。例如:class A{public:&&& A(bool _isTrue= true, int _num=10){ isTrue = isT num = _ }; //默认构造函数&&& bool isT&&&&};int main(){&&& A //调用类A的默认构造函数}理解“被需要”这三个字前面提到在《Effective C++》中指出惟有默认构造函数”被需要“的时候编译器才会合成默认构造函数。关键字眼是”被需要“。被谁需要?做什么事情?像下面这段代码,默认构造函数”被需要“了吗?class A{public:&&& bool isT&&&&};int main(){&&& A&&& if (a.isTrue)&&&&&&& cout && a.&&& return 0;}你可能认为这里定义类对象a的时候没有提供参数且A没有定义默认构造函数,编译器肯定是合成了一个默认构造函数并调用它来初始化A的数据成员,实则不是。当你试图查看合成默认构造函数把数据成员num初始化为什么值的时候,你会发现编译器甚至都让你运行不了程序:当类只含有内置类型或复合类型的成员时,编译器是不会为类合成默认构造函数的,这种类并不符合”被需要“的条件,甚至当类满足“被需要”条件,编译器合成了默认构造函数时,类中内置类型与复合类型数据成员依然不会在默认构造函数中进行初始化。Primer中也有提到:“如果类包含内置或复合类型的成员,则该类不应该依赖于合成的默认构造函数“。上面代码中,默认构造函数”被需要“是对程序来说的,程序需要isTrue被初始化以便可以进行条件判断,需要num被初始化以便可以输出。然而这种需要并不会促使编译器合成默认构造函数。惟有被编译器所需要时,编译器才会合成默认构造函数。那怎样的类才是编译器需要合成默认构造函数的呢?总结:合成默认构造函数总是不会初始化类的内置类型及复合类型的数据成员。分清楚默认构造函数被程序需要与被编译器需要,只有被编译器需要的默认构造函数,编译器才会合成它。&&问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
1,c++自定义无参构造函数后 ,定义一个该类的对象时显示,多个默认构造函数,什么原因呢?2,相关代码如下:
include&iostream&
class point{public:
point(int xx, int yy);
int getx()
int gety()
};point::point(int xx = 0, int yy = 0){
point::point(){
}int main(){
***//出现编译错误***
point b(1, 2);
运行后,这句代码编译出错
错误如下:严重性
“point::point”: 对重载函数的调用不明确
e:c++primerjd_exjd_ext11.cpp
行错误(活动)
类 "point" 包含多个默认构造函数
e:c++primerJD_EXJD_EXt11.cpp
是需要自己定义一个默认构造函数,point()=defaul:吗?那这个无参的构造函数,该怎么调用呢?谢谢大神 ,麻烦帮忙解答。。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
class Point
//这样写的话,直接P可以调用下面的这个构造函数,因为有默认参数值啊
//但是如果你还有无参数的构造函数,编译器就会报错,告诉你有歧义
Point(int a = 0, int b = 0) :
x(a), y(b) {}
/* 这和上面那个构造函数会在用P定义对象时,产生歧义,因为都可以不用参数啊。
Point() {}
这和上面那个差不多
更多关于default的知识,可以参看这个链接,简单说了一下。
下次提问后,看看版面啊。。。。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
point::point(int xx = 0, int yy = 0){
x =y =}因为你的这个构造函数有默认形参,可以作为无参数的构造函数用,所以你再定义一个无参数的构造函数就是重载失败。并且你一旦定义了构造函数,编译器是不会再合成默认构造函数的。把Point()去掉即可,多余了。仅供参考。
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:只需一步,快速开始
后使用快捷导航没有帐号?
查看: 942|回复: 14
求教一个C++类的默认构造函数的问题
累计签到:158 天连续签到:1 天&
马上注册加入鱼C,享用更多服务吧^_^
才可以下载或查看,没有帐号?
有一个类定义如下:
class Myclass {
& &Myclass(int n) : value(n) {}
& &int getValue( ) const {return value}
问题:类Myclass的构造函数的个数是______。给出的答案是2个。
不是说类中定义了任何带参数的构造函数后,都不会在自动生成任何默认构造函数吗?这个类不应该是只有一个带参数的构造函数吗?为什么说还有一个默认构造函数?求大神指导啊。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:52 天连续签到:1 天&
回帖奖励 +1
这是哪看来的?有无源码的
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:158 天连续签到:1 天&
这是哪看来的?有无源码的
这只是一道选择题,完整的题目就是这样了。。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:52 天连续签到:1 天&
个人见解:程序运行时实际调用只有一个,从这一单单的定义看,默认的构造函数是潜在的,程序还没定义对象,并不知道是否定义了构造函数; 仅供参考:lol::lol::lol:
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:158 天连续签到:1 天&
个人见解:程序运行时实际调用只有一个,从这一单单的定义看,默认的构造函数是潜在的,程序还没定义对象, ...
嗯,谢谢兄台
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:43 天连续签到:1 天&
不是应该有一个默认复制构造函数吗
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:158 天连续签到:1 天&
不是应该有一个默认复制构造函数吗
也就是说,编译器不会自动生成一个默认构造函数,但是会自动生成一个默认复制构造函数吗?
是这个意思吗?默认复制构造函数是总会存在的,不会因为自定义了构造函数而不生成吗?
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:52 天连续签到:1 天&
6L 说法应该是正解,我的是歪论:cry:cry:cry ,C++会自动提供复制构造函数,如果用户没有定义的话。跟默认构造函数一样
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:991 天连续签到:1 天&
一个C++类,自动带有:
1. 默认构造函数(即无参构造函数,它逐个调用基类以及成员的默认构造函数)
2. 拷贝哦构造函数(浅拷贝)
3. 赋值运算符(浅拷贝)
4. 析构函数(逐个调用基类以及成员的析构函数,如果他们有的话)
当你自己实现了任意一个构造函数后,该类就不再产生默认构造函数;当各个自动生成的函数不能满足你的要求时,你必须自己重新实现它们。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:158 天连续签到:1 天&
一个C++类,自动带有:
1. 默认构造函数(即无参构造函数,它逐个调用基类以及成员的默认构造函数)
那这个题目中的类到底有几个构造函数?一个自定义的、一个默认赋值构造函数?是这样的大神
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:43 天连续签到:1 天&
今天上课听我们老师讲类,他说类一个空类里面有5个默认函数:funk::
1.赋值重载函数
2.取址重载函数 (“&”)
3.构造函数
4.析构函数
5.默认构造函数
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:991 天连续签到:1 天&
那这个题目中的类到底有几个构造函数?一个自定义的、一个默认赋值构造函数?是这样的大神
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:9 天连续签到:0 天&
有一个类定义如下:
class Myclass {
& &Myclass(int n) : value(n) {}
& &int getValue( ) const {return value}
要想知道怎么回事,很简单嘛。定义2个对象,一个带参数,一个不带参数,如果都成功了,说明是2个构造函数,如果没有参数的失败了,那说明只有一个构造函数。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:347 天连续签到:1 天&
这个还有个默认的拷贝构造函数。。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
累计签到:4 天连续签到:1 天&
有一个类定义如下:
class Myclass {
这么说不太对吧。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
小甲鱼强烈推荐 /1
特效不会给你基本工资,但却能让你升职加薪
- - - - - - - - - - - -
有备无患,念念不忘
•••(
Powered by

我要回帖

更多关于 组策略 阻止这个程序 的文章

 

随机推荐