关于类的几个问题,请多多指教!!!!

xyeyxh 2002-07-01 01:45:26
我是一名自学者,在看<<C++大学教程>>,有些问题不明白来请教请教大家!!!

<<C++大学教程>>中定义类的const成员函数的格式是(比如)
int xxxxxxx() const { };
我想问它的返回值是 int 类型的还是const int 类型的?
本书中说格式为成员函数 const int xxxxxx() const { }的返回类型是const int 类型的,那么这两种格式到底有什么区别呢???我要是在main函数之后定义一个首部为
const int zzzzz() 这样的函数正确吗???


再一个问题就是(例子Class Array {
public:
Array(int=10);

static int getarraycount();

private:
int size;
int *ptr;
static int arraycount;
}; ) 在给类对象赋值时该书中最常用的是使用默认构造函数赋值和用
Array integers(x)的格式赋值 ,
可书中还说Array integers=x和Array integers(x)是等价的,那么我们在平时
给对象赋值时是否可以用Class object=x或者Class objec={x1,x2,x3,……}或
者其它别的格式赋值????可事实上该书很少使用Class object=x这样的格式

我的这两个问题,请各位大虾给详细解答一下好吗? 我先在这里谢谢大家了!!!!

------------
------我是一名自学者,大本营是我的学校--------
我是一名初学者,各位网友是我老师
小生不才,请多指教
----------------
...全文
34 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangrk 2002-07-04
  • 打赏
  • 举报
回复
UPUPUP
fangrk 2002-07-02
  • 打赏
  • 举报
回复
UP
fangrk 2002-07-01
  • 打赏
  • 举报
回复
你可以把int,char...都看作一个类.
你也可以这么写:
int n1(0),n2(0);//相当于int n1=0,n2=0;
char ch1('a'),ch2('b');//等价于char ch1='a',ch2='b';

=的写法来源于C,像int,float,char,string等只需要一个参数的都可以用这种方法赋值和初始化.
类似int n(0);这样的写法,来源于类.如果类的初始化需要多个参数,则只能用这种方法.
比如,我写了一个类,关于婴儿的.
生成一个婴儿,我假设需要下列参数:
出生年月(字符串),性别(布尔),父母两个人的身份证编号(字符串)
class BABY{
public:
BABY(const string&bir,bool sex,const string&fa,const string&mo):
birthday(bir),gender(sex),fatherID(fa),motherID(mo)
{cout<<"Oh,A baby is borned!"<<endl;}
....
private:
string birthday;
bool gender;
string fatherID,motherID;
};
在构造一个BABY object的时候,你必须用参数列表的方法写:
BABY TOM("20020520",true,"123456789","112233446");
这只是举例说明一下第二种写法

实际上,我认为int,char,float...也是类.
zzkoo 2002-07-01
  • 打赏
  • 举报
回复
同意林鹤:
int xxxxxxx() const { };返回的是int型,后面的const代表这个函数不改变类的数据成员的值。
const int xxxxxx() const { }返回的是const int,后面的const同上。

>>“我要是在main函数之后定义一个首部为const int zzzzz() 这样的函数正确吗???”
正确。
2,各位说的基本都对,“=”用于基本数据类型的赋值,如想用于类等特殊类型的赋值操作就要定义操作符重载。上面说如有动态分配内存空间时应自定义拷贝构造函数是为了防止浅拷贝。
fangrk 2002-07-01
  • 打赏
  • 举报
回复
int fun() const { };
返回的是int型,后面的const代表这个函数不改变类的数据成员的值(声明为mutable的除外)。

const int fun() const { }返回的是const int,后面的const同上。

>>“我要是在main函数之后定义一个首部为const int zzzz() 这样的函数正确吗???”
正确。

Array A1(5),A2=10;
A1,A2都是调用拷贝构造函数,你只需要在构造函数中间输出一个消息就知道了.
比如:

#include <iostream>
#include <cstdlib>
using namespace std;
class Array
{
public:
Array(int n=10):num(n)
{ cout<<"copy str\n";
}
private:
int num;
};
int main()
{ Array A1(5),A2=10;

system("PAUSE");
return 0;
}
zhdleo 2002-07-01
  • 打赏
  • 举报
回复
你问:const X* const this是什么意思呢???
表示这个X类型的指针是常量,而且这个this的内容也是个const。就是这样。

是涉及动态的分配内存空间,那么你必须有=重载这个函数,,没有它的话
你用Array integers=x就会产生错误!

不是不能用的问题,能不能用要看看你有没有=的重载函数
bccleem 2002-07-01
  • 打赏
  • 举报
回复
int xxxxxxx() const { };代表三个含义
1.此成员函数能被const类对象调用
2.此成员函数不能修改对象的数据成员,除非数据成员加上了mutable修饰
3.此成员函数的返回值为int
(注:const类对象不能调用尾部没加const的成员函数)
const int xxxxxx() const { }除了返回值为const int外,其余与上面相同

Array integers(x)调用的是Array的constructor
假设x的类型是TypeA。则Array必须有以下一个constructor定义
Array(const TypeA&);

Array integers=x有两种情况(按优先级)
1.Array定义了一个"="操作符"
Array& operator=(const TypeA&);
2.Array定义了一个constructor
Array(const TypeA&);

有机会看看深度探索C++对象模型,能弄懂很多概念
sungolf 2002-07-01
  • 打赏
  • 举报
回复
int xxxxxxx() const { };返回的是int型,后面的const代表这个函数不改变类的数据成员的值。
const int xxxxxx() const { }返回的是const int,后面的const同上。

>>“我要是在main函数之后定义一个首部为const int zzzzz() 这样的函数正确吗???”
正确。

当写下Array object(x)时,编译器调用Array的默认构造函数。
而Array object=x则通过下面的过程:1.产生一个临时变量Array tmp(x)、2.调用Array的operator=操作符,另object=tmp、3, tmp的discontructor


xyeyxh 2002-07-01
  • 打赏
  • 举报
回复
呵呵,不好意思,你说的将this声明为一个const X* const this我又不懂了

const X* const this是什么意思呢???

第二个问题我的确是在看运算符重载的时候遇到的,你的意思是不是说在重载了=时如果涉及动态的分配内存空间才用Array integers=x??那没有重载=时如果涉及动态的分配内存空间就不能使用Array integers=x对吗??
zhdleo 2002-07-01
  • 打赏
  • 举报
回复

int xxxxxxx() const { };
表明函数返回的是一个const类型的值,而不是将this声明为一个const X* const this;

将this声明为一个const X* const this;
就是你后面说的那种。
const类型的成员函数即可被const型对象调用,也可以被普通对象调用;而普通对象只能调用普通的成员函数。

第二个,那种一般你的类里要用=号的重载函数比较好。
因为,如果成员涉及到动态的分配内存空间,而你没写=的重载函数,而那样使用
Array integers=x必然会有错,
如果不涉及动态的分配内存空间,那么=号就和一般情况是一样,
所以还是写出=的重载,在用=比较好,不会出错!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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