首页 新闻 会员 周边

不理解C++中的类

0
悬赏园豆:5 [已解决问题] 解决于 2019-03-23 21:27

我有如下两个文件:
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?

HDWK的主页 HDWK | 初学一级 | 园豆:152
提问于:2019-03-23 11:57
< >
分享
最佳答案
0

若主函数定义对象时没有传值
那么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

收获园豆:5
Drake19 | 菜鸟二级 |园豆:209 | 2019-03-23 14:58

这个语法是C语言的吧?这条语句:

Num::Num(int n): num(n) {}

其中num(n)表示给num变量赋值为n,那为什么后面加上花括号{}?

HDWK | 园豆:152 (初学一级) | 2019-03-23 18:52

花括号表示那是一个函数
不加花括号也可以 但要在类外面重新定义(当然 看情况可能不定义也没关系)
例如:
class Num{
private:
int num;
public:
Num(int);
}
Num::Num(int n):num(n){}
注意":num(n)"是参数初始化
它的格式:类名(类型1 形参1,类型2 形参2,...):数据成员1(参数表1),数据成员2(参数表2)...{}

Drake19 | 园豆:209 (菜鸟二级) | 2019-03-23 19:59
其他回答(2)
1

这属于C++基础知识了,即“初始化列表”。构造函数初始化列表以一个冒号开始,接着是以逗号分隔的类成员变量,实际是调用每个类成员变量的构造函数。
n( 0 )当成int n( 0 );来理解就行了,本质就是构造了n,只是在初始化列表中,不需要加类型。
如果类成员变量是const类型,那么就必须在初始化列表中赋初值,否则就无法变更这个成员变量的值了。

至于{}那是因为构造函数也是一个函数,语法要求必须有{}

类的私有字段只有类成员函数可访问,Num.cpp里的就是Num类的成员函数,自然可以访问私有成员变量num

一罪 | 园豆:250 (菜鸟二级) | 2019-03-24 19:48
0

你也是可以做到把类函数放进定义里的

DreamcastleSystem | 园豆:18 (初学一级) | 2019-08-21 13:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册