用类产生对象 没有合适的默认结构体 构造函数数可用

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(290)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'《C++对象模型》学习测试代码二(VS2005上测试)',
blogAbstract:'// memberFuncs.cpp : 定义控制台应用程序的入口点。//#include \"stdafx.h\"#include &iostream&class AAA{public:\tAAA(int val);\tvirtual ~AAA(){cout&&\"~AAA() m_val = \"&&m_val&&};\tvoid outputval(void);private:\tint m_};AAA::AAA(int val=0):m_val(val){
cout&&\"AAA()',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:6,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'一介布衣',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}详解C++中变量的初始化规则
投稿:daisy
字体:[ ] 类型:转载 时间:
这篇文章详细介绍了关于C++中变量的初始化规则,C++如果不对变量初始化,可能会导致很多后果,所以学习C++变量初始化规则就很重要了,下面一起来看看
定义没有初始化式的变量时,系统有时候会帮我们初始化变量。
系统如何初始化取决于变量的类型以及变量定义的位置。 
内置类型变量是否自动初始化取决于变量定义的位置。
函数体外定义的变量初始成0;函数体内定义的变量不进行自动初始化。除了用作赋值操作的左操作数,其他任何使用未初始化变量的行为都是未定义的,不要依赖未定义行为。
以int类型为例,一段简单的测试代码:
#include &iostream&
int main()
cout && a &&
cout && b &&
在VS执行这段代码,输出变量a的值0,同时VS会报错:Run-Time Check Failure #3 — The variable 'b' is being used without being initialized。 变量a被自动初始化为0;变量b未被自动初始化。
类类型变量在定义时,如果没有提供初始化式,则会自动调用默认构造函数进行初始化(不论变量在哪里定义)。如果某类型没有默认构造函数,则定义该类型对象时必须提供显示初始化式。
一段简单的测试代码(默认构造函数由编译器自动生成):
#include &iostream&
class testA
void printf() const
cout && data &&
int main()
a.printf();
b.printf();
在VS执行这段代码,得到以下结果:
编译器自动生成的默认构造函数使用与变量初始化相同的规则来初始化数据成员。对象a在函数体外定义,其int类型数据成员被初始为0;对象b在函数体内定义,合成默认构造函数不会对其进行初始化(符合内置类型变量初始化规则),其中存放的都是随机值。同样,如果数据成员是类类型,则会调用相应的默认构造函数对数据成员进行初始化。
如果稍微改变一下这个类的定义,定义一个构造函数以阻止编译器自动生成默认构造函数:
#include &iostream&
class testA
testA(int a)
void printf() const
cout && data &&
int main()
a.printf();
b.printf();
这段代码无法通过编译:error C2512: “testA”: 没有合适的默认构造函数可用。
以上就是关于C++中变量的初始化规则的全部内容,希望这篇文章的内容对大家学习使用C++能有所帮助,如果有疑问可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
可以定义没有构造函数的类吗?任一类必须要由构造函数吗?
扫二维码下载作业帮
2亿+学生的选择
首先所有类都是有构造函数、复制构造函数和析构函数的;但是如果我们不显式地定义它们,编译器会自动为我们添加默认的构造函数、复制构造函数和析构函数;如果我们显式地定义了构造函数、复制构造函数或者析构函数,那么编译器就会使用我们定义的函数.例如: class A {}; 类A中没有定义任何成员,但是编译器会为它添加默认的 构造函数、复制构造函数和析构函数,以便创建对象,销毁对象和复制对象;默认的构造函数 和 析构函数 都是public的,不做任何事情 的,相当于函数体是空的,其中构造函数默认是无参数的;默认的复制构造函数是把所有成员复制给另一个对象(属于 浅复制 ) 下面是显式定义 构造函数、复制构造函数和析构函数 的例子#include class A{public: A(string name)
//显式定义构造函数,系统将不产生默认构造函数,而使用定义的构造函数 {
this->name =
为您推荐:
其他类似问题
扫描下载二维码C++也可以和Java一样不显示声明类的构造函数,编译器在创建对象时调用默认的构造函数。但C++的成员变量的初始值是不确定的,尤其是int类型的变量,初始值未知,容易导致不确定的bug,给程序运行带来麻烦。所以在声明类时还是声明默认的构造函数并初始化变量,养成好的编码风格。下面是声明类时没有显示声明构造函数和显示声明了构造函数的简单实例:#include &stdafx.h&
#include &string&
#include &iostream&
// 没有显示声明构造函数,编译器会调用默认的构造函数
class Test1 {
// 显示声明了构造函数
class Test2 {
Test2(int i, string s);
Test2::Test2():i(0), str(&Test2&) {
cout&&&Test2()&&&
Test2::Test2(int i, string s):i(i), str(s) {
cout&&&Test2(int i, string s)&&&
int _tmain(int argc, _TCHAR* argv[])
cout&&&----------------调用默认构造函数,成员变量初始值不确定----------------&&&
Test1 *t = new Test1;
cout&&&t-&i = &&&t-&i&&&, t-&str = [&&&t-&str&&&]&&&
printf(&t-&i = %d, t-&str = [%s]\n&, t-&i, (const char *)t-&str.c_str());
cout&&endl&&&----------------调用默认构造函数,并为其成员变量设置初始值----------------&&&
Test1 *t1 = new Test1;
t1-&i = 0;
t1-&str = &Test1&;
cout&&&t1-&i = &&&t1-&i&&&, t1-&str = [&&&t1-&str&&&]&&&
printf(&t1-&i = %d, t1-&str = [%s]\n&, t1-&i, (const char *)t1-&str.c_str());
cout&&endl&&&----------------调用自定义的无参构造函数,在构造函数中进行初始化成员变量----------------&&&
Test2 *t2 = new Test2;
cout&&&t2-&i = &&&t2-&i&&&, t2-&str = [&&&t2-&str&&&]&&&
printf(&t2-&i = %d, t2-&str = [%s]\n&, t2-&i, (const char *)t2-&str.c_str());
cout&&endl&&&----------------调用自定义的有参构造函数,在构造函数中进行初始化成员变量----------------&&&
Test2 *t3 = new Test2(100, &Today is very hot!&);
cout&&&t3-&i = &&&t3-&i&&&, t3-&str = [&&&t3-&str&&&]&&&
printf(&t3-&i = %d, t3-&str = [%s]\n&, t3-&i, (const char *)t3-&str.c_str());
}在VS2012上运行结果如下:----------------调用默认构造函数,成员变量初始值不确定----------------t-&i = -, t-&str = []t-&i = -, t-&str = []----------------调用默认构造函数,并为其成员变量设置初始值----------------t1-&i = 0, t1-&str = [Test1]t1-&i = 0, t1-&str = [Test1]----------------调用自定义的无参构造函数,在构造函数中进行初始化成员变量----------------Test2()t2-&i = 0, t2-&str = [Test2]t2-&i = 0, t2-&str = [Test2]----------------调用自定义的有参构造函数,在构造函数中进行初始化成员变量----------------Test2(int i, string s)t3-&i = 100, t3-&str = [Today is very hot!]t3-&i = 100, t3-&str = [Today is very hot!]
本文已收录于以下专栏:
相关文章推荐
     –和类名相同
     –没有返回值类型
     –只在建立对象的时候被自动调用一次
     –调用构造函数的主要目的是初始化对象
o一个对象的创建...
构造函数的调用顺序:基类 --& 数据成员类对象(基于声明的顺序) --& 子类;
析构函数的调用顺序则相反。
一、派生类对象中基类构造函数和派生类中构造函数调用顺序(WIN7 64位 VS2012)
(1)、先执行派生类的构造函数还是先执行基类中的构造函数?
利用下面这段代码进行打印测试
对于普通类型的对象来说,它们之间的复制是很简单的,例如:
int a=100;
而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝...
在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如:
int a = 10; 
  自己定义的...
在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如:
int a = 10; 
  自己定义的类的对象同...
建立一个存储和处理字符串的类DelCharStr。
(1)私有数据成员
char *s:字符串的首地址。
int len:该字符串的长度值。
(2)公有成员函数
构造函数:动态申请存储字符串...
1.如果父类中没有构造函数,即使用默认的构造函数,那子类的构造函数会自动调用父类的构造函数
class Father
private int a,b;
void show()
从汇编代码学习C++语言1—类对象构造函数与析构函数
        类对象必须经历初始化与销毁两个过程,类的构造函数与析构函数担当此重任。本文作为从汇编代码学习C++语言系列的...
他的最新文章
讲师:AI100
讲师:谢梁
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 结构体 构造函数 的文章

 

随机推荐