C++程序的输出| 11套
预测以下 C++ 程序的输出。
问题 1
#include
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() 第一行中的编译器错误,即“Point p1;”
由于存在用户定义的构造函数,编译器不会创建默认构造函数(请参阅此 GFact)。如果我们从 Point 类中删除复制构造函数,程序运行良好并打印输出为“x = 10, y = 20”
问题2
#include
using namespace std;
int main()
{
int *ptr = new int(5);
cout << *ptr;
return 0;
}
输出:5
new运算符还可以初始化原始数据类型。在上面的程序中,地址 'ptr' 处的值使用 new运算符初始化为 5。
问题 3
#include
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 被修改。该程序编译并运行良好,但强烈建议不要使用这种类设计(请参阅this)。返回对私有变量的引用允许类的用户直接更改私有数据,这违背了封装的目的。