class A { public: A(int n):val(n) { } virtual void Out() = 0; A Square() { return A(++val); }这段代码有啥问题
时间: 2024-03-14 19:49:28 浏览: 47
这段代码有两个问题,分别是:
1. A类是一个抽象类,其中定义了一个纯虚函数Out(),但是在A类中定义了一个Square()函数,其中返回了A类型的对象,这是错误的,因为抽象类是不能够被实例化的,也就是不能够创建抽象类的对象。
2. 在Square()函数中,通过++val对A类的成员变量进行了修改,这会导致返回的A类型对象的值与原对象不同,破坏了函数的语义。正确的做法是应该定义一个派生类B,继承自A,并在B中实现Out()函数和Square()函数,其中Square()函数返回一个B类型的对象,这样就可以保证Square()函数的正确性和语义了。
阅读全文