字符型数组的读取
本帖最后由 cde32 于 2013-10-10 14:55:31 编辑
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{ return name; }
};
class B:public A{
public:
B(char * n){
strcpy ( name,n);
}
};
void main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( );
cout <<"Name:"<<a.getName( );
cout <<"name[0]:"<<name[0];//error C2065: 'name' : undeclared identifier
//error C2109: subscript requires array or pointer type
}
你申明了两个对象,直接调用name[0]显示未定义,必须指明包含name数组的类,类被初始化后才会出现类中的成员。
a.name[0]或者a::name[0]
B b("Hello!");
char* name = b.getName();
for(int i =0;i < 255; ++i)
{
std::cout << name[i];
}
#include <cstring>
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{ return name; }
};
class B:public A{
public:
B(const char * n){
strcpy ( name,n);
}
};
int main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( )<<endl;
cout <<"Name:"<<a.getName( )<<endl;
cout <<"a name[0]:"<<a.getName()[0]<<endl;
cout <<"b name[0]:"<<b.getName()[0]<<endl;
return 0;
}
#include <cstring>
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{ return name; }
};
class B:public A{
public:
B(const char * n){
strcpy ( name,n);
}
};
int main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( )<<endl;
cout <<"Name:"<<a.getName( )<<endl;
cout <<"a name[0]:"<<a.getName()[0]<<endl;
cout <<"b name[0]:"<<b.getName()[0]<<endl;
return 0;
} #include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{ return name; }
};
class B:public A{
public:
B(char * n){
strcpy ( name,n);
}
};
void main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( );
cout <<"Name:"<<a.getName( );
cout <<"name[0]:"<<name[0];//error C2065: 'name' : undeclared identifier
//error C2109: subscript requires array or pointer type
}
我想知道“char name[255]”的每个元素是什么,比如name[0],该怎样读出来?
你申明了两个对象,直接调用name[0]显示未定义,必须指明包含name数组的类,类被初始化后才会出现类中的成员。
a.name[0]或者a::name[0]
你好,能解答下我的问题吗?
7楼的问题~!
我改成了char name[6];然后定义两个6位的字符串没有越界——是不是我们理解错了?两组字符串没有一起存储到char name[6];里面,而是a、b两个不同的指针分别指向char name[6];?在这里可以把char name[6];当成是一个变量看待?
记得给人家分。。
当然,另外几层楼的神仙也记得给分
跟你学习了。
[解决办法]
。。。。我想到了 图灵狗 大哥的 那个,可是。。我怎么没去尝试下呢
[解决办法]
#include <cstring>
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{ return name; }
};
class B:public A{
public:
B(const char * n){
strcpy ( name,n);
}
};
int main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( )<<endl;
cout <<"Name:"<<a.getName( )<<endl;
cout <<"a name[0]:"<<a.getName()[0]<<endl;
cout <<"b name[0]:"<<b.getName()[0]<<endl;
return 0;
}
我改成了char name[6];然后定义两个6位的字符串没有越界?两组字符串没有一起存储到char name[6];里面,而是a、b两个不同的指针分别指向char name[6];?在这里可以把char name[6];当成是一个变量看待?
就是说,根本不能直接读出char name[6]有什么?
public 成员,char name[255]; public 继承
下面都没有问题
cout <<"name[0]:"a.<<name[0];
cout <<"name[0]:"<<b.name[0];
#include <iostream>
using namespace std;
class A{
public:
char name[255];
//private:
char * getName( )
{ return name; }
void print_any(int n)
{
assert( n>=0 && n<255);
if(n>=0 && n<255)
cout<<"name["<<n<<"]= "<<name[n]<<",Hex = "<<hex <<(int)name[n]<<endl;
}
};
class B:public A{
public:
B(char * n){
strcpy ( name,n);
}
};
void main( ){
B b("Hello!");
B a("1111!");
cout <<"Name:"<<b.getName( );
cout <<"Name:"<<a.getName( );
for(int i=0;i<255)
a.print_any(i);
for(int i=0;i<255)
b.print_any(i);
}
retrurn 0;
}
类的成员,在类的非静态方法内,可以不用成员语法,和域名语法
直接使用名字.
其他地方,要用成员语法,和域名语法。
非静态成员,一般用成员语法,
对象和引用访问,使用 . ;
a.name[0];
r.name[0];
指针,使用 。->
p-> name[0];
成员指针,成员函数指针 .*,->*
静态成员,一般用域名语法
A::x;
静态成员,也可以用成员语法访问,不过会被编译器,直接替换成域名语法,用类名来访问。
类的成员访问,受到访问权限的控制,无权访问的作用域,不能访问。
运行你的代码出现7处错误,不行啊!
赞一个!
[解决办法]
越界会覆盖其它地方,结果难料,深究下去没有意义。
我确定没有越界!上午我发帖问过越界问题。改成char name[4]就越界出错了!是指针问题!