预测下列C++程序的输出。
null
问题1
#include<iostream> using namespace std; class Point { private : int x; int y; public : Point( const Point&p) { x = p.x; y = p.y; } void setX( int i) {x = i;} void setY( int j) {y = j;} int getX() { return x;} int getY() { return y;} void print() { cout << "x = " << getX() << ", y = " << getY(); } }; int main() { Point p1; p1.setX(10); p1.setY(20); Point p2 = p1; p2.print(); return 0; } |
输出:main()的第一行出现编译器错误,即“点p1;”
由于有一个用户定义的构造函数,编译器不会创建默认的构造函数(请参阅 这件事 ).如果我们从类点移除复制构造函数,程序运行良好,并将输出打印为“x=10,y=20”
问题2
#include<iostream> using namespace std; int main() { int *ptr = new int (5); cout << *ptr; return 0; } |
产出:5 新操作符还可以初始化基本数据类型。在上述程序中,使用新运算符将地址“ptr”处的值初始化为5。
问题3
#include <iostream> using namespace std; class Fraction { private : int den; int num; public : void print() { cout << num << "/" << den; } Fraction() { num = 1; den = 1; } int &Den() { return den; } int &Num() { return num; } }; int main() { Fraction f1; f1.Num() = 7; f1.Den() = 9; f1.print(); return 0; } |
产出:7/9 方法Num()和Den()分别返回对Num和Den的引用。由于返回了引用,所以返回的值可以用作左值,并修改私有成员den和num。该程序编译和运行良好,但强烈反对这种类设计(参见 这 ).返回对私有变量的引用允许类的用户直接更改私有数据,这违背了封装的目的。
如果您发现任何答案/解释不正确,或者您想分享有关上述主题的更多信息,请发表评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END