返回信息流class A
{
public:
int a;
A(){a=1;}
void fun(){printf("%d ",a);};
};
class B:public A
{
public:
int a;
B(){a=2;}
};
void main()
{
B b;
b.fun();
}
为什么输出的是1?B中的属性a应该已经覆盖了A中的a啊?
%%%%%%%%%%%%%%%% 下面问题已解决 %%%%%%%%%%%%%%%%%%%%%
string arr[]={"Tom","Lily","Lucy"};
printf("%d %d",sizeof(arr),sizeof(string));
输出是 96 32
输出不应该是三个字符串的长度值和么??求教
这是一条镜像帖。来源:北邮人论坛 / cpp / #74689同步于 2013/10/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
子类属性覆盖基类同名属性,但输出为什么是这样的?
Mulany
2013/10/22镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
说的是字符串这个数据类型的长度,而不是具体某个字符串的长度。
百度百科:http://baike.baidu.com/link?url=OlZLB5YCUkTAq9tk7WQcMC9z2yIhCSk1xsi84-Js7KPq2zrZZcKHxeDvPYYYLItLY84Gt9lEt0WUhMt-D7alEa
sizeof和sizeof(string)的问题
http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html
不是的 就是sizeof,发现实际输出跟看的书上不一样,所以迷惑了
【 在 douzhao333 的大作中提到: 】
: 你想用的是strlen()吧?
嗯 明白了 谢谢
【 在 a206206 的大作中提到: 】
: sizeof arr == sizeof arr[0] * eleNum = sizeof string * 3= 32*3 = 96
覆盖的过程是这样的:b.fun(),先在local作用域B中找fun(),没找到,然后在B的外围作用域A找,找到。然后printf("%d ",a)里面的a,先在其local作用域fun()函数里找,没找到,然后再往fun()的外围作用域也就是A找,找到,此时a==1。就算在A里面没找到它也只会往A的外围作用域去找,不会再去B了。你可以试试在A作用域外面定义一个a,把A里面的变量a去掉。看一看,输出什么结果。
非常感谢,终于解开了这个疙瘩。不知道这种细节性的原理该看什么书才能学到呢??
【 在 hdj 的大作中提到: 】
: 覆盖的过程是这样的:b.fun(),先在local作用域B中找fun(),没找到,然后在B的外围作用域A找,找到。然后printf("%d ",a)里面的a,先在其local作用域fun()函数里找,没找到,然后再往fun()的外围作用域也就是A找,找到,此时a==1。就算在A里面没找到它也只会往A的外围作用域去找,不会再去B了。你可以试试在A作用域外面定义一个a,把A里面的变量a去掉。看一看,输出什么结果。