鱼C论坛

 找回密码
 立即注册
查看: 1685|回复: 7

[已解决]类的定义与声明

[复制链接]
发表于 2019-1-17 11:03:25 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 竟无语凝噎 于 2019-1-17 11:09 编辑

如图 QQ图片20190117110003.png



首先编写了Screen类 ,
然后又在类中声明了Screen 类型的引用。

有点像无限递归的感觉,
还没定义好就在内部调用,这样一层一层的调用下去,和无限递归的区别在哪里?
最佳答案
2019-1-17 11:03:26
竟无语凝噎 发表于 2019-1-17 14:11
哦 ,也就是说在
class Screen
{

不是,而是这个set函数就没有被调用,所以不存在对返回值的初始化操作问题

最佳答案

查看完整内容

不是,而是这个set函数就没有被调用,所以不存在对返回值的初始化操作问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-17 11:03:26 | 显示全部楼层    本楼为最佳答案   
竟无语凝噎 发表于 2019-1-17 14:11
哦 ,也就是说在
class Screen
{

不是,而是这个set函数就没有被调用,所以不存在对返回值的初始化操作问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-17 11:10:27 | 显示全部楼层
跟递归一点关系都没有,这里只是返回一个本类的对象而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-17 11:14:17 | 显示全部楼层
本帖最后由 竟无语凝噎 于 2019-1-17 11:15 编辑
BngThea 发表于 2019-1-17 11:10
跟递归一点关系都没有,这里只是返回一个本类的对象而已


根据结果来看是这样。

但是这个和以下的区别在哪里呢?

int func()
{
        std::cout << "a " << std::endl;
        func();       
}


int main()
{
    func();
   
    return 0;
}

同样是在未构建完毕的时候(一个是类,一个是函数),使用了相关的东西(类和函数),但是一个就是无限递归,一个就是可以使用。 我不理解的是这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-17 11:30:17 | 显示全部楼层
竟无语凝噎 发表于 2019-1-17 11:14
根据结果来看是这样。

但是这个和以下的区别在哪里呢?

在类中的函数除了特殊的意外,都不会自动调用
初始化类成员对象时,该函数并不会被调用

函数则不同,递归意味着你已经开始调用函数,如果无设置条件,将无限调用

你注意到了吧,都是函数调用,而类中返回的是一个类对象,并不存在无限递归的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-17 13:17:10 | 显示全部楼层
本帖最后由 竟无语凝噎 于 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中这么书写类的时候, 应该是不论在调不调用的时候都没有问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-17 13:46:20 | 显示全部楼层
竟无语凝噎 发表于 2019-1-17 13:17
可能是我表述不正确。

class F1

函数在执行的时候回执行里面的所有内容,除非出错或者提前return了

类的方法除了特殊函数都需要定义对象后才能使用方法
初始化对象的时候只调用了构造函数而已
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-17 14:11:43 | 显示全部楼层
本帖最后由 竟无语凝噎 于 2019-1-17 16:19 编辑

96062559-0C9B-4bca-93E4-65DEA9967120.png [quote]BngThea 发表于 2019-1-17 13:46




算是一个比较圆满的回答

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 04:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表