64,655
社区成员
发帖
与我相关
我的任务
分享
include <iostream>
using namespace std;
class Test
{
public:
Test(int i){m_i = i;}
Test(){Test(m_i);}//程序进入这里按F10一直中断(咚咚响,此时,系统在执行何操作?1问题)
隔一段时间,弹出提示“stack OverFlow ”紧着弹出“Access Violation”为什么这样呢?2问题
void SetValue (int j)
{
m_i = j;
}
int GetValue()
{
return m_i;
}
private:
int m_i;
};
int main()
{
Test b;//设断点
b.SetValue(10);
int value = b.GetValue();
cout<<value<<endl;
return 0;
}
class SomeType {
int number;
string name;
SomeType( int i, string& s ) : number(i), name(s){}
public:
SomeType( ) : SomeType( 0, "invalid" ){}
SomeType( int i ) : SomeType( i, "guest" ){}
SomeType( string& s ) : SomeType( 1, s ){ PostInit(); }
};
class BaseClass
{
public:
BaseClass(int iValue);
};
class DerivedClass : public BaseClass
{
public:
using BaseClass::BaseClass;
};
此语法等同于 DerivedClass 声明一个DerivedClass(int) 的建构式。 同时也因为 DerivedClass 有了一个继承而来的建构式,所以不会有默认建构式。class SomeClass
{
public:
SomeClass() {}
explicit SomeClass(int iNewValue) : iValue(iNewValue) {}
private:
int iValue = 5;
};
若是建构式中没有设置iValue的初始值,则会采用类定义中的成员初始化,令iValue初值为5。在上例中,无参数版本的建构式,iValue便采用默认所定义的值; 而带有一个整数参数的建构式则会以指定的值完成初始化。Test(){Test(this->m_i);}
Test(){Test(m_i);}//这个调用的是自身
Test(){Test((int)m_i);}//这样才是调用另一个
Test(){Test(3);}//这样也是调用另一个
Test(){Test(GetValue());}//这样也是另一个
具体原因,请自行分析……
#include <iostream>
using namespace std;
class Test
{
public:
Test(int i){m_i = i;}
Test(){Test((int)m_i);}//mark
void SetValue (int j)
{
m_i = j;
}
int GetValue()
{
return m_i;
}
private:
int m_i;
};
int main()
{
Test b;//设断点
b.SetValue(10);
int value = b.GetValue();
cout<<value<<endl;
return 0;
}