一道C++选择题
由于常对象不能被更新,因此A)通过常对象只能调用它的常成员函数B)通过常对象只能调用静态成员函数C)常对象的成员都是常成员D)通过常对象可以调用任何不改变对象值的成员函数...
由于常对象不能被更新,因此
A)通过常对象只能调用它的常成员函数
B)通过常对象只能调用静态成员函数
C)常对象的成员都是常成员
D)通过常对象可以调用任何不改变对象值的成员函数
为什么选A不选D?D怎么错了?
能举例子说明吗? 就是举出简单的程序例子来说明 展开
A)通过常对象只能调用它的常成员函数
B)通过常对象只能调用静态成员函数
C)常对象的成员都是常成员
D)通过常对象可以调用任何不改变对象值的成员函数
为什么选A不选D?D怎么错了?
能举例子说明吗? 就是举出简单的程序例子来说明 展开
3个回答
展开全部
A.常对象为了保证数据不被修改,只能调用在编写是就定义为常成员函数的函数
这是牺牲效率来保证安全的典型情况。
D.就是A的反例啦。为了保证程序的安全,这是编译就进行的检查。
常对象就只能调用它的常成员函数。
一定要说为什么,C++的安全机制在我看来是没有什么动态保证的,所以要用编译时就保证安全。
而且常成员函数不能调非常成员函数。
这是牺牲效率来保证安全的典型情况。
D.就是A的反例啦。为了保证程序的安全,这是编译就进行的检查。
常对象就只能调用它的常成员函数。
一定要说为什么,C++的安全机制在我看来是没有什么动态保证的,所以要用编译时就保证安全。
而且常成员函数不能调非常成员函数。
追问
能举例子说明吗? 就是举出简单的程序例子来说明
追答
隐式调用的构造函数和析构函数例外;
const Time t1(10,15,36); //定义常对象t1,并构造赋初值;
t1.get_time(); //get_time()分两种情况讨论;
定义get_time()时
1.若定义:
void get_time()
{
……(内容省略)……
}
则这不是常函数,不可调用;
2.若定义:
void get_time() const
{
……(内容省略)……
}
则这是常函数,不可调用;
const是函数类型的一部分,定义声明的时候都要有;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
常对象不能调用非常成员函数,比如那些get类型的成员函数就不行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
常对象只能被调用而不能被修改,A正确
改变常对象值的成员函数,首先在编译是就不会通过,所以不存在这样的函数,D因此错了
改变常对象值的成员函数,首先在编译是就不会通过,所以不存在这样的函数,D因此错了
追问
能举例子说明吗? 就是举出简单的程序例子来说明
追答
对不起,我刚才对D的理解有误,常对象可以调用不改变对象值的成员函数,但该成员函数必须是常成员函数,所以D错了。
以下是例子,当getVal()定义为常成员函数时,testGetIt()可以正常调用,而去掉const,getVal()成为一般的成员函数时,编译不能通过。
class Test {
int val;
public:
Test() {}
int getVal() const {
return this->val;
}
int testGetIt() const {
return getVal();
}
};
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询