竟无语凝噎 发表于 2019-1-17 11:03:25

类的定义与声明

本帖最后由 竟无语凝噎 于 2019-1-17 11:09 编辑

如图



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

有点像无限递归的感觉,
还没定义好就在内部调用,这样一层一层的调用下去,和无限递归的区别在哪里?

BngThea 发表于 2019-1-17 11:03:26

竟无语凝噎 发表于 2019-1-17 14:11
哦 ,也就是说在
class Screen
{


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

BngThea 发表于 2019-1-17 11:10:27

跟递归一点关系都没有,这里只是返回一个本类的对象而已

竟无语凝噎 发表于 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;
}

同样是在未构建完毕的时候(一个是类,一个是函数),使用了相关的东西(类和函数),但是一个就是无限递归,一个就是可以使用。 我不理解的是这里

BngThea 发表于 2019-1-17 11:30:17

竟无语凝噎 发表于 2019-1-17 11:14
根据结果来看是这样。

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


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

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

你注意到了吧,都是函数调用,而类中返回的是一个类对象,并不存在无限递归的情况

竟无语凝噎 发表于 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中这么书写类的时候, 应该是不论在调不调用的时候都没有问题。

BngThea 发表于 2019-1-17 13:46:20

竟无语凝噎 发表于 2019-1-17 13:17
可能是我表述不正确。

class F1


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

类的方法除了特殊函数都需要定义对象后才能使用方法
初始化对象的时候只调用了构造函数而已

竟无语凝噎 发表于 2019-1-17 14:11:43

本帖最后由 竟无语凝噎 于 2019-1-17 16:19 编辑

BngThea 发表于 2019-1-17 13:46




算是一个比较圆满的回答

页: [1]
查看完整版本: 类的定义与声明