C++纠错题 指针 和 形参实参问题

题目:
改正程序错误,使程序输出正常.
程序功能是打印Object类型变量的分量a

#include<iostream>
using namespace std;

struct Object {
    int a;
    int b;
};

Object& MyFunction(int a = 20, int b) {
    // error 默认实参不在形参列表的结尾
    Object* o = new Object;
    o->a = a;
    o->b = b;
    return o;
    // error 没有返回引用类型
}

int main() {
    Object& MyFunction(int a = 20, int  b);
    // error 默认实参不在形参列表的结尾
    Object& rMyObj = MyFunction(, 5);
    // error 应输入表达式
    cout << "rMyObj.a = " << rMyObj.a << endl;
    delete rMyObj;
    // 必须指向完整对象类型的指针
    system("pause");
    return 0;
}

改正:

#include<iostream>
using namespace std;

struct Object {
    int a;
    int b;
};

Object& MyFunction(int a, int b) {
    Object* o = new Object;
    o->a = a;
    o->b = b;
    return *o;
}

int main() {
    Object& MyFunction(int a , int  b);
    Object& rMyObj = MyFunction(20, 5);
    cout << "rMyObj.a = " << rMyObj.a << endl;
    delete &rMyObj;
    system("pause");
    return 0;
}
  • 这些错误都是visual 提示的,但是没有理解深刻意思,有没有人能解释一下 特别是这个 *a 和 &rMyObj
#笔试题目#
全部评论
默认实参要写到列表末尾就是说,你a有默认值,需要写到b后面。或者两个都没有默认值。然后o是指针类型的,*o 解释了o对常量地址的引用即常量在内存中地址给o。应输入表达式是因为实参列表不完整 然后&rMyobj 才是对象类型,而不加&就是指针类型。 我是这么想的,希望有大佬指出错误🤔
点赞 回复
分享
发布于 2018-11-14 21:18
1.默认参数是从右往左的,具体为什么你看看21行那种错误输入就知道了,你赋值使从左往右对应,少了的可以用默认参数从右往左补上 2.第9行的函数返回的是Object& (对象的引用),而13行返回的是一个指向这个对象的指针,当然会错了,你问的问题就说明你没弄清楚引用和指针的区别,你把引用的使用当做一个正常变量看就好了。而使用指针指向的对象,还需要用一个取址运算* 
点赞 回复
分享
发布于 2018-11-15 19:06
联易融
校招火热招聘中
官网直投

相关推荐

投递美团等公司10个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务