Student ss("boy");/Student ss="boy"是说明一个对象,并且初始化吧!?

snow810211 2004-12-27 11:58:48
class Student
{
public:
Student(char * pName)
{
....
}
...
};
void main()
{
Student ss("boy");
Student tt = "boy";
..
}
这两种方法都可以吧!我看书上有这么写得。

但是,我的问题是:
如果Student(char * pName,int id);
这个构造函数有两个参数的话,如果在说明对象的时候可以使用:
Student ss("boy",10);

可以用Student tt = ("boy",10);吗?
...全文
233 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyondtkl 2004-12-27
  • 打赏
  • 举报
回复
sorry 我弄錯了。。

copy constructor發生在   初始化處
而 assign operator發生在  賦值處

比如 Student s1('aaa');
Student s2(s1);
Student s3 = s1; // cp costr...
Student s2 = s3; // assign operator =
lovefly_fanny 2004-12-27
  • 打赏
  • 举报
回复
Student tt = "boy"; // 这个调用拷贝构造函数
~~~~~~~~~~~~~~~~~~~~同样是构造函数(虽说拷贝构造函数是构造函数的特例),但这里它会调用默认的构造函数,而不是默认的拷贝构造函数
blueskyzsz 2004-12-27
  • 打赏
  • 举报
回复
Student ss("boy"); // 这个调用构造函数
Student tt = "boy"; // 这个调用拷贝构造函数
Wolf0403 2004-12-27
  • 打赏
  • 举报
回复
这两种形式通用的前提条件是,类具有这样一个合适的【单参数】的【非 explicit】的构造函数。。因此如果构造函数有两个参数就不能用 operator= 的形式了。
晨星 2004-12-27
  • 打赏
  • 举报
回复
Student tt = ("boy",10);
不行
Student tt = Student("boy",10);
可以。
Wolf0403 2004-12-27
  • 打赏
  • 举报
回复
Student ss("boy") 和 Student tt = "boy"; 都是初始化过程,都调用的是 Student::Student(char *),不过第一个是显式,第二个是隐式;跟 operator= 无关。
agaric 2004-12-27
  • 打赏
  • 举报
回复
给对象用 = 需要重载"="操作符

Student ss("boy");调用构造函数


xjzsky 2004-12-27
  • 打赏
  • 举报
回复
不行吧,该Student tt = {"boy",10}
beyondtkl 2004-12-27
  • 打赏
  • 举报
回复
可以用Student tt = ("boy",10);吗?

不行....

Student ss("boy");
Student tt = "boy";

這樣 要看你得構造函數得定義 後面這個要看你對 operator=得重載定義...
skfox 2004-12-27
  • 打赏
  • 举报
回复
明天再来看
wuyupu 2004-12-27
  • 打赏
  • 举报
回复
没什么好说的了 楼上的都说完了
bobkevin 2004-12-27
  • 打赏
  • 举报
回复
怎么发主题贴呀
zhengwei1984222 2004-12-27
  • 打赏
  • 举报
回复
#include<iostream>

struct A{
int m_int;
double m_double;
};

void main()
{
A test = {3,4};

}不就相当于这种吗!
snow810211 2004-12-27
  • 打赏
  • 举报
回复
楼上的楼上是什么意思啊???解释一下啊:)
zhengwei1984222 2004-12-27
  • 打赏
  • 举报
回复
同意楼上,类市结构的初始化
csder 2004-12-27
  • 打赏
  • 举报
回复
#include <iostream.h>
#include <string.h>
class Student
{
public:
char Name[20];
int ID;

public:
// Student(char * pName,int id)
// {
// strcpy(Name,pName);
// ID = id;
// }
void Show()
{
cout<<ID<<"---"<<Name<<endl;
}
};

void main()
{
Student ss = {"boy",15};
//Student ss = ("boy",15);
// Student ss("boy",15);
ss.Show();
}
oyljerry 2004-12-27
  • 打赏
  • 举报
回复
用public也不行
csdnlady 2004-12-27
  • 打赏
  • 举报
回复
//Student ss = {"boy",15};
这个不行的原因我想是由于CLASS的数据成员是私有的,所以不能这样访问。
beyondtkl 2004-12-27
  • 打赏
  • 举报
回复
回复人: lovefly_fanny() ( ) 信誉:100 2004-12-27 13:20:00 得分: 0


ms 刚才的帖子回复不成功,再来一次
Student s1('aaa');==>"aaa"
Student s2(s1);
Student s3 = s1; // cp costr...
Student s2 = s3; // assign operator =
~~~~~去掉“Student” ,否则redefinetion

--------- 是得 不好意思了 沒注意到。。。。:-(
lovefly_fanny 2004-12-27
  • 打赏
  • 举报
回复
单个参数的时候:Student ss = "boy";
编译器可以将其解释为ss("boy"),而去调用
构造函数,
但如果是大于等于2个参数的时候这样写法,
编译器就不能将其转化为可认识的形式:ss("boy",15)了
从而就不能调用构造函数,
还有这里根本就没涉及拷贝构造函数的调用,
楼主不要混了,
拷贝构造函数只发生在三种情况下:
1:用一个类的对象初始化某个新的类对象
2:函数调用,参数传递
3:函数返回时(生成一个临时变量)
that 's all~~
加载更多回复(3)

65,201

社区成员

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

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