学习C++primer第4天 之 小问题

jinjunweiruan 2008-07-06 06:43:50
1.数字3他是一个对象吗??对象是不是要给他分配内存的?


2.在class类中,class类中的对象可以访问私有成员,这个是对的吧。那私有成员能不能直接修改这些数据呢 ??不能的话,那怎样间接修改呢?


3.书上日:”字符串字面值与标准库string 类不是同一类型。。。。请问区别。。。


4.string::size_type 这个是什么,。怎么使用。。。



谢谢!谢谢!
...全文
172 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjunweiruan 2008-07-07
  • 打赏
  • 举报
回复
Ok,明白 了
jinjunweiruan 2008-07-06
  • 打赏
  • 举报
回复
就1个3...不是int 3
K行天下 2008-07-06
  • 打赏
  • 举报
回复
4 string::size_type 这个是什么,。怎么使用。。。
它是表示string长度的类型, 具体是unsigned int ,unsigned long要看具体平台


string类类型和许多其他库类型都定义了一些伙伴类型(companion types)。这些伙伴类型使得库类型的使用是机器无关的(machine-independent)。

size_type就是这些伙伴类型中的一种。它定义为与unsigned型(unsigned int或unsigned long)具有相同的含义,而且可以保证足够大可存储任意string对象的长度。为了使用由string类型定义的size_type类型,程序员必须加上作用域操作符来说明所使用的size_type类型是由string类定义的。
任何存储string的size操作结果的变量必须为string::size_type类型。特别重要的是,不要把size的返回值赋给一个int变量。
虽然我们不知道string::size_type的确切类型,但可以知道它是unsigned型



3.书上日:”字符串字面值与标准库string 类不是同一类型。。。。请问区别。。。
区别很大,string类封装了 char* 和 它的一些操作,


2.在class类中,class类中的对象可以访问私有成员,这个是对的吧。那私有成员能不能直接修改这些数据呢 ??不能的话,那怎样间接修改呢?
通过 public 成员函数、友元函数,


数字3他是一个对象吗??对象是不是要给他分配内存的?
你说的3 是 int i=3; 还是就是一个字面值常量
simo110 2008-07-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 k2eats 的回复:]
4 string::size_type 这个是什么,。怎么使用。。。
它是表示string长度的类型, 具体是unsigned int ,unsigned long要看具体平台


string类类型和许多其他库类型都定义了一些伙伴类型(companion types)。这些伙伴类型使得库类型的使用是机器无关的(machine-independent)。

size_type就是这些伙伴类型中的一种。它定义为与unsigned型(unsigned int或unsigned long)具有相同的含义,而且可以保证足够大可存储任…
[/Quote]

答得好
K行天下 2008-07-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jinjunweiruan 的回复:]
就1个3...不是int 3
[/Quote]
如果是程序中的常量 分配空间到常量区
类似: #define N 3
五号智能 2008-07-06
  • 打赏
  • 举报
回复
对象是某类的实例。
3是int的实例,你可以把它看做对象。但对于常量。在运行的时候已经给它分配好内存了,你不用特意给它分配

问题2,在类中,类的成员,是可以访问类的内部资源(所有公私保护成员)的。可以直接修改.在类外,是不可以通过类对象直接访问和修改私有成员变量与保护成员值。

但可以利用公有的成员函数间接修私有成员的值。

访问用点运算符来访问例如

#include <iostream>
using namespace std;


class Text
{
private:
int i;
private:
int k;
public:
int l;

Text():i(0),k(0),l(0){}
Text(const int& temp):i(temp),k(temp*2),l(temp*4){}
Text(const int &temp1, const int &temp2,const int &temp3):i(temp1),k(temp2),l(temp3){}
void FZ (const int &temp1, const int &temp2,const int &temp3)
{
i=temp1;
k=temp2;
l=temp3;
}
void Out()
{
cout << i << " " << k << " "<< l <<endl;
}


};


int main()
{

Text val; //通过无参数构造函数初始化成员变量的值
val.Out();

val.l=3; //l是公有的可以直接访问
val.Out();

Text val_a;
val_a.FZ(4,5,6); //通过公有的成员函数访问修改成员变量的值
val_a.Out();


Text val_b(7,8,9); //通过有参数构造函数初始化成员变量的值
val_b.Out();

Text val_c(5); //通过有参数构造函数初始化成员变量的值
val_c.Out();


Text *pval;
pval = new Text;
pval->FZ(9,8,6); //指针通过->运算符来访问
pval->Out();

delete pval;

system("pause");
return 0;

}



3.书上曰:”字符串字面值与标准库string 类不是同一类型。。。。请问区别。。。
两种类型,区别很大
比如string可以使用一些运算符+,=,==,>,<,!=
string 可以用下标访问元素,可以用迭代器访问元素
其它的你自己找,这种问题,很像是问一个人和一个猴子有什么区别。像的地方挺多,但完全不是一回事。自己去理解吧

4.string::size_type 这个是什么,。怎么使用。。。
看书!不要拿论坛当教材。书上写的很清楚的东西尽量别问,没几个人愿意回答。
这个是是一种类型,是string下标的数据类型。像定义普通变量一样用
string a="alkdjflkasjdflkajsdflkjafdlkjasldfkj";
for(string::size_type i=0; i<a.size(); i++)
cout <<a[i]<<endl;




denghanjie 2008-07-06
  • 打赏
  • 举报
回复
1.是,不是
2.class有他的封装性,他的属性是不能直接通过“.”来取用或修改。你可以利用public里面的函数来间接的修改。
GoAssemblyNow 2008-07-06
  • 打赏
  • 举报
回复
1.数字3他是一个对象吗??对象是不是要给他分配内存的?
是的,一般在函数中,由编译器在栈上分配内存,函数结束,自动销毁,不用我们自己操心。
2.在class类中,class类中的对象可以访问私有成员,这个是对的吧。那私有成员能不能直接修改这些数据呢 ??不能的话,那怎样间接修改呢?
“class类中的对象”,这个提法有点模糊,你是说,类的对象实例吗?还是作为类成员的另一个类的对象?
3.书上日:”字符串字面值与标准库string 类不是同一类型。。。。请问区别。。。
字符串字面类型为const char*,是基本类型。标准库string类型为string,是类类型

#include<iostream>
#include<typeinfo>
#include <string>
int main()
{
using namespace std;
char* x="this is a test!";
string s="another type!";

cout<<typeid("this is a test!").name()<<endl;//typeid()f返回参数的类型
cout<<typeid("another type!").name()<<endl;

system("pause");
return 0;
}
我用dev c++编译结果是
A16_c
A14_c
可见确实不同

4.string::size_type 这个是什么,。怎么使用。。。
size_type根据存储的类型返回字符串的长度,对于具体化的string ,将根据char返回字符串的长度,这时,与size_of 等效。一下字很难结实清楚,学到stl的时候,慢慢就会明白的
.


artman 2008-07-06
  • 打赏
  • 举报
回复
1. 不是,是
2. 不知你说的直接修改是什么意思?
3. 字符串字面值是const char *
4. size_type 类型所占内存长度类型 (unsigned int)
Venivici 2008-07-06
  • 打赏
  • 举报
回复
多多参考下MSDN 小问题都能自己解决的~ ^_^

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧