我有如下两个文件:
File: Num.h
class Num { private: int num; public: Num(int n); int getNum(); };
File: Num.cpp
#include "Num.h" Num::Num() : num(0) { } Num::Num(int n): num(n) {} int Num::getNum() { return num; }
我不理解Num::Num() : num(0) { }这条语句中的:num(0){}是什么含义。还有Num.cpp文件怎么处理Num.h的私有字段num?
若主函数定义对象时没有传值
那么num会默认为0
没有这句代码定义对象时没有传值 它的num就不会被赋值
就像这样:
int test;
printf("%d",test);
==========================================================
私有成员不能通过类外的对象 直接 访问(包括且不限于赋值)
但可以在共有函数中通过构造函数来定义num的值 如上面那个在不传值的时候num被赋值为0
如果传了一个值就会执行Num::Num(int n): num(n) {} 将你输入的值用形参n来传给num
例如主函数中写入:
Num first(); //first.num被赋值为0
Num second(2); //second.num被赋值为2
这个语法是C语言的吧?这条语句:
Num::Num(int n): num(n) {}
其中num(n)表示给num变量赋值为n,那为什么后面加上花括号{}?
花括号表示那是一个函数
不加花括号也可以 但要在类外面重新定义(当然 看情况可能不定义也没关系)
例如:
class Num{
private:
int num;
public:
Num(int);
}
Num::Num(int n):num(n){}
注意":num(n)"是参数初始化
它的格式:类名(类型1 形参1,类型2 形参2,...):数据成员1(参数表1),数据成员2(参数表2)...{}
这属于C++基础知识了,即“初始化列表”。构造函数初始化列表以一个冒号开始,接着是以逗号分隔的类成员变量,实际是调用每个类成员变量的构造函数。
n( 0 )
当成int n( 0 );
来理解就行了,本质就是构造了n,只是在初始化列表中,不需要加类型。
如果类成员变量是const类型,那么就必须在初始化列表中赋初值,否则就无法变更这个成员变量的值了。
至于{}
那是因为构造函数也是一个函数,语法要求必须有{}
。
类的私有字段只有类成员函数可访问,Num.cpp里的就是Num类的成员函数,自然可以访问私有成员变量num
啦
你也是可以做到把类函数放进定义里的