类的定义与声明
本帖最后由 竟无语凝噎 于 2019-1-17 11:09 编辑如图
首先编写了Screen类 ,
然后又在类中声明了Screen 类型的引用。
有点像无限递归的感觉,
还没定义好就在内部调用,这样一层一层的调用下去,和无限递归的区别在哪里? 竟无语凝噎 发表于 2019-1-17 14:11
哦 ,也就是说在
class Screen
{
不是,而是这个set函数就没有被调用,所以不存在对返回值的初始化操作问题 跟递归一点关系都没有,这里只是返回一个本类的对象而已 本帖最后由 竟无语凝噎 于 2019-1-17 11:15 编辑
BngThea 发表于 2019-1-17 11:10
跟递归一点关系都没有,这里只是返回一个本类的对象而已
根据结果来看是这样。
但是这个和以下的区别在哪里呢?
int func()
{
std::cout << "a " << std::endl;
func();
}
int main()
{
func();
return 0;
}
同样是在未构建完毕的时候(一个是类,一个是函数),使用了相关的东西(类和函数),但是一个就是无限递归,一个就是可以使用。 我不理解的是这里 竟无语凝噎 发表于 2019-1-17 11:14
根据结果来看是这样。
但是这个和以下的区别在哪里呢?
在类中的函数除了特殊的意外,都不会自动调用
初始化类成员对象时,该函数并不会被调用
函数则不同,递归意味着你已经开始调用函数,如果无设置条件,将无限调用
你注意到了吧,都是函数调用,而类中返回的是一个类对象,并不存在无限递归的情况 本帖最后由 竟无语凝噎 于 2019-1-17 13:24 编辑
BngThea 发表于 2019-1-17 11:30
在类中的函数除了特殊的意外,都不会自动调用
初始化类成员对象时,该函数并不会被调用
可能是我表述不正确。
class F1
{
public :
void print()
{
std::cout << "11111" << std::endl;
print();
}
};
int main()
{
F1 f1;
f1.print();
return 0;
}
这个会无限递归。
class Screen
{
public:
Screen &set(char);
};
而这个在类Screen 未完全定义完毕的时候直接使用了该类型。
Screen为什么不是无限递归?
因为还未定义完毕啊,而且是在定义内使用未定义完毕的东西。
在我的感觉上和函数内调用自己的函数是一个道理,
同样是在未构建完毕的时候(一个是类,一个是函数),使用了相关的东西(类和函数,在图中是使用了Screen类型 , 在我后来贴出的里面是使用了未完全定义完毕的函数),但是一个就是无限递归,一个就是可以使用。 我不理解的是这里
您说的调用的问题,在函数(无限递归函数)外未调用该函数的时候,也不会有问题,但是在调用的时候会有问题。
但是C++primer中这么书写类的时候, 应该是不论在调不调用的时候都没有问题。 竟无语凝噎 发表于 2019-1-17 13:17
可能是我表述不正确。
class F1
函数在执行的时候回执行里面的所有内容,除非出错或者提前return了
类的方法除了特殊函数都需要定义对象后才能使用方法
初始化对象的时候只调用了构造函数而已 本帖最后由 竟无语凝噎 于 2019-1-17 16:19 编辑
BngThea 发表于 2019-1-17 13:46
算是一个比较圆满的回答
页:
[1]