看了一遍书,还是理解的不够。那就从历年的考题中,来学习吧,挖掘他的考点,挖掘我们课本上当时不理解的知识点。题不再多,而在于精,自然有必要好好研究研究。一下是结合真题参考答案和自己的理解。也依靠博客,和广大的要考C++的同学们一起交流,多多指点。
关键词:
构造函数 成员函数及其调用
首先来看一道基本操作真题。
题目:
改错。输出结果为:The value is 10
// proj1.cpp
#include <iostream>
using namespace std;
class MyClass {
int value;
public:
// ERROR ********found********
void MyClass(int val) : value(val) {}
int GetValue() const { return value; }
void SetValue(int val);
};
// ERROR ********found********
inline void SetValue(int val) { value = val; }
int main()
{
MyClass obj(0);
obj.SetValue(10);
// ERROR ********found******** 下列语句功能是输出obj的成员value的值
cout << "The value is " << obj.value << endl;
return 0;
}
正确答案:
(1)MyClass(int val) : value(val) {}
(2)void MyClass::SetValue(int val) { value = val; }
(3)cout<< "The value is "<< obj.GetValue()<< endl;
我的挖掘:
(1)构造函数
是什么:
用于对象初始化的函数,即为对象的数据成员赋初值。由于类的封装性,不允许在类的非成员函数中直接访问类对象的私有和保护数据成员。因此,对类对象数据成员的初始化工作就落到了类对象的成员函数身上,因为他们可以访问类对象的私有和保护数据成员。这就专门用到了构造函数。
用法:
a与类名完全相同。(一般成员函数不能和类名相同)
b 用于定义初始化的状态,没有返回值,也不能用void来修饰,这就保证了他不用自动返回值。
c 不能被直接调用。
因此该题中,不能用void。
(2)成员函数定义
a 简单的说,类是一个包含函数的结构体。类的成员有数据成员与函数成员两 类。数据成员称为属性。而函数成员描述类的行为,称为方法。函数成员有函 数构成,因此也叫成员函数。
b 函数成员可以放在类中定义,也可以放在类外。放在类中定义的成员函数为内 联(inline)函数。c++可以再类内声明成员函数的原型,在类外定义函数 体。这样使我们对成员函数的功能一目了 然。
c 类外定义函数体的格式:
返回值类型 类名 ::成员函数名(形参表){函数体;}
此题,在类外什么成员函数,因此不是内联函数。函数返回值 可以在类中找到。
因此答案为void MyClass::SetValue(int val) { value = val; }
(3) 类的定义及成员函数定义
a默认访问权限为privatev.
b 成员函数调用,value是私有成员,私有成员只能被类的成员函数调用。 所以在主函数中不能直接
调用value,可以使用成员函数GetValue()来得到value的值。