VC++
2008
的代码如下,请参考:
#include
"stdafx.h"
#include
#include
#include
using
namespace
std;
#define
MRANGE
10
int
chk_range(string
s,
int
rng[][2])
{
const
char
dig[]
=
"0123456789";
int
ret
=
0,
cnt
=
0,
f_st
=
0;
int
l
=
s.length(),
i,
p;
char
c;
for
(i=0;
i
<
l;
i++)
{
c
=
s.at(i);
if
(c
==
'
')
continue;
//空格
if
(c
==
'~')
{
//波浪号
if
(f_st
!=
1)
{
//没有起始数值
ret
=
-1;
break;
}
}
else
if
(c
==
',')
{
//逗号
if
(f_st
<
1)
{
//没有数值
ret
=
-2;
break;
}
if
(f_st
==
1)
//单数值
rng[cnt][1]
=
rng[cnt][0];
cnt++;
f_st
=
0;
}
else
if
(strchr(dig,
c)
!=
NULL)
{
//开头数值
if
(cnt
>=
MRANGE)
{
//数据范围组数超过10
ret
=
-3;
break;
}
if
(f_st
>
1)
{
//终止数值之后有了另外数值
ret
=
-4;
break;
}
p
=
i;
while
(++i
<
l)
//找出数值终点
if
(strchr(dig,
s.at(i))
==
NULL)
break;
sscanf_s(s.substr(p,
i-p).c_str(),
"%d",
&rng[cnt][f_st++]);
//代入数组因素
if
(f_st
>
1)
{
//有终止数值
if
(rng[cnt][0]
>
rng[cnt][1])
{
//起始数值大于终止数值
ret
=
-5;
break;
}
}
i--;
}
else
{
//字符异常
ret
=
-6;
break;
}
}
if
(!ret)
{
//正常处理
if
(f_st
==
1)
rng[cnt][1]
=
rng[cnt][0];
ret
=
++cnt;
//返回范围组数
}
return
ret;
}
void
_main()
{
int
r[MRANGE][2],
i,
v;
string
rng;
//
=
"1~30,
50,
60,
70~80,
90~300";
cout
<<
"请输入数据范围字符串>
";
cin
>>
rng;
cout
<<
"\n";
int
ret
=
chk_range(rng,
r);
//检查输入值
if
(ret
<
0)
cout
<<
"数据范围字符串有错:错误代码=
"
<<
ret
<<
"\n";
else
if
(ret
==
0)
cout
<<
"数据范围未输入\n";
else
{
cout
<<
"请输入一个整数>
";
cin
>>
v;
cout
<<
"\n";
for
(i=0;
i
<
ret;
i++)
if
(r[i][0]
<=
v
&&
v
<=
r[i][1])
break;
if
(i
<
ret)
cout
<<
"数值在范围内\n";
else
cout
<<
"数值在范围外\n";
}
}
int
_tmain(int
argc,
_TCHAR*
argv[])
{
_main();
return
0;
}
你用了类嵌套,当然是不同了,CStudent stu("LiMing","21010211"); 生成stu对象时,先调用父类的无参数构造函数,此时name=""。然后
CStudent::CStudent(char*name,char*id,bool isman) :student(name,id,isman)
{
dbScore[0]=0;
dbScore[1]=0;
dbScore[2]=0;
} 再初始化CStudent的内置对象student,调用CPerson的带参数的构造函数,此时name="LiMing"。当以stu.getName()输出Name调用的是从父类继承过来的getName输出的Name是为空的,而stu内置对象student调用getName输出的就是LiMing。
2、改成pravite就不能通过'.'方式直接访问,只能有该内的成员函数或者友元函数来访问!
1.不同的。stu.getName()得到的是stu的name,是较外面一层的name。而stu.student.getName()是较里面的name,是stu这个cstudent对象的内嵌对象的name。你这个类相当于定义了一个怀孕的学生,就是学生里面还有人。
2.改成pravite就不能通过stu.student直接访问了。