
c++基础知识
希望能帮忙解释一下下面问题,而不是只要个答案,能简单通俗点最好,麻烦了~1。什么是转换运算符函数还有赋值运算符函数?2。6、在C++中,执行cout<<012+021<<...
希望能帮忙解释一下下面问题,而不是只要个答案,能简单通俗点最好,麻烦了~
1。什么是 转换运算符函数 还有 赋值运算符函数?
2。6、 在C++中,执行cout<<012+021<<endl; 所显示的结果是___________________。
//难道输出的默认是十进制?
3。以整形return 10&&-10为什么是-1?
4。为什么析构还有拷贝复制函数不能指定为虚函数?
5。若有for循环语句for(int x=0; x=3; x++){;},此循环语句执行的次数将是____________次。
//按说中间应该填写逻辑语句却写成赋值语句,那vc怎么读这段代码的呢?
6。在字符串中使用以下字符(字符组合)时,不需要采用转义字符的是【 】。
A.\\ B.'
C.\ D."
//为什么?
7。++的优先级比[]低,那么对于数组a[i++]应该是和a[i]等价的吧?
那么i++>i呢? 为什么不对? ++优先级不是高于大于小于号的吗?
8。bool fn()
{
char *a="abcde";
char *b="bcdef";
return strcmp(a,b);
}
void main()
{
int i(0),j(0);
cout<<fn()<<endl;
}
为什么后来我把strcmp(a,b)改成strcmp(b,a)之后,和之前一样输出结果是1??
8.构造对象数组的时候同时会执行构造函数吗?
补充:真的很悲伤,我只有这么多分,我还怕不给分没人搭理...所以就给了,哎... 展开
1。什么是 转换运算符函数 还有 赋值运算符函数?
2。6、 在C++中,执行cout<<012+021<<endl; 所显示的结果是___________________。
//难道输出的默认是十进制?
3。以整形return 10&&-10为什么是-1?
4。为什么析构还有拷贝复制函数不能指定为虚函数?
5。若有for循环语句for(int x=0; x=3; x++){;},此循环语句执行的次数将是____________次。
//按说中间应该填写逻辑语句却写成赋值语句,那vc怎么读这段代码的呢?
6。在字符串中使用以下字符(字符组合)时,不需要采用转义字符的是【 】。
A.\\ B.'
C.\ D."
//为什么?
7。++的优先级比[]低,那么对于数组a[i++]应该是和a[i]等价的吧?
那么i++>i呢? 为什么不对? ++优先级不是高于大于小于号的吗?
8。bool fn()
{
char *a="abcde";
char *b="bcdef";
return strcmp(a,b);
}
void main()
{
int i(0),j(0);
cout<<fn()<<endl;
}
为什么后来我把strcmp(a,b)改成strcmp(b,a)之后,和之前一样输出结果是1??
8.构造对象数组的时候同时会执行构造函数吗?
补充:真的很悲伤,我只有这么多分,我还怕不给分没人搭理...所以就给了,哎... 展开
3个回答
展开全部
1、
转换运算符函数就是强制类型转换也可以当作操作符重载
例如
class B
{
public:
B(int data) : m_data(data) {}
operator int() const
{ return m_data; }
int m_data;
};
当有 B b(100); 时,将b强制转换为int类型时如
int c = (int) b; 或者 int c = static_cast<int> (b);
此时将调用 operator int() cons t函数,返回的就是 b.m_data 的值
而从外部就看就像是把b强制转换成int类型一样
赋值运算符函数就是当在非定义时出现的由一个 = 运算符连接两个对象时候调用的函数
例如
B b1(100);
B b2(200);
b1 = b2; // 此处将调用operator = 这个操作符函数。
// 如果类B中没有显式给出operator = 函数,编译器会提供一个默认的operator =函数,该默认函数将把b2的所有内容拷贝到b1中
// 你也可以通过重载的方式自己定制operator = 函数,
// 例如 const B& operator (const B& b) { m_data = b.m_data; }
要注意定义时出现的 = 不调用 operator =,
例如
B b3 = b2; // 这里不调用operator =,而是调用类的拷贝构造函数。
2、cout在给数据的时候虽然可以识别十进制、八进制,但是输出的时候默认都是十进制,除非你人为去设定
3、这个普通的C++环境应该是返回1的,不知道你用的是什么。你也可以通过 cout<<true<<endl; 这句话测试一下你的true值是多少(应该是1)
4、不知道你为什么有析构函数不能指定为虚函数这个概念,从现在起,你需要更正过来。
析构函数是可以指定为虚函数的!而且将析构函数指定为虚函数是一个好的思想。
除非确实不必要(如没有继承层次的类),都应该将类的析构函数指定为虚函数。
至于构造函数,则是没有必要指定为虚函数,试想实例化一个对象的时候必定是要知道其类型的,执行的也只可能是这个类型的构造函数,不会有虚函数的问题,所以也就不允许将构造函数指定为虚函数。
5、该语句将无限地执行下去,直到你强制退出
for的中间语句是一个表达式,表达式值非零则继续循环
表达式值为零则结束循环
x=3也是一个表达式,该表达式的值就是3,所以会无限循环下去 (你也可以通过 int y; cout << (y=9) << endl; 这两条语句测试一下)
6、单引号在字符串中不用转意,单引号在语法中是用来表示一个字符的,而在一个字符串中一定不可能会用单引号来标识字符,因为这是字符串!
所以在字符串中,单引号不用转义。当然你使用转义后的单引号也完全可以。即在字符串中, ' 和 \' 的效果一样。
7、表达式 i++>i 的值一定是false。因为后置的++都是先使用原来的值,然后才自加。遇到类似这样的问题你可以这么理解:
后置自加,自加是在++出现的语句的分号(逗号)之后。例如i++>i这个,你可以不管三七二十一,先把++拿掉 得到 i > i (false)
最后在这个包含 i++>i 的一句话执行完以后(逗号或分号以后), 再来对 i = i + 1;
8、strcmp函数返回的是一个int值。当两字符串相等时返回0,不等时返回非0
"abcde" 和 "bcdef" 是一对不等的字符串,无论比较的时候是a在前还是b在前,strcmp函数都将返回非0值。
这个非0值又将以一个bool类型返回,非0既是true,true的值是1。所以无论是strcmp(a,b)还是strcmp(b,a),输出结果都是1。
转换运算符函数就是强制类型转换也可以当作操作符重载
例如
class B
{
public:
B(int data) : m_data(data) {}
operator int() const
{ return m_data; }
int m_data;
};
当有 B b(100); 时,将b强制转换为int类型时如
int c = (int) b; 或者 int c = static_cast<int> (b);
此时将调用 operator int() cons t函数,返回的就是 b.m_data 的值
而从外部就看就像是把b强制转换成int类型一样
赋值运算符函数就是当在非定义时出现的由一个 = 运算符连接两个对象时候调用的函数
例如
B b1(100);
B b2(200);
b1 = b2; // 此处将调用operator = 这个操作符函数。
// 如果类B中没有显式给出operator = 函数,编译器会提供一个默认的operator =函数,该默认函数将把b2的所有内容拷贝到b1中
// 你也可以通过重载的方式自己定制operator = 函数,
// 例如 const B& operator (const B& b) { m_data = b.m_data; }
要注意定义时出现的 = 不调用 operator =,
例如
B b3 = b2; // 这里不调用operator =,而是调用类的拷贝构造函数。
2、cout在给数据的时候虽然可以识别十进制、八进制,但是输出的时候默认都是十进制,除非你人为去设定
3、这个普通的C++环境应该是返回1的,不知道你用的是什么。你也可以通过 cout<<true<<endl; 这句话测试一下你的true值是多少(应该是1)
4、不知道你为什么有析构函数不能指定为虚函数这个概念,从现在起,你需要更正过来。
析构函数是可以指定为虚函数的!而且将析构函数指定为虚函数是一个好的思想。
除非确实不必要(如没有继承层次的类),都应该将类的析构函数指定为虚函数。
至于构造函数,则是没有必要指定为虚函数,试想实例化一个对象的时候必定是要知道其类型的,执行的也只可能是这个类型的构造函数,不会有虚函数的问题,所以也就不允许将构造函数指定为虚函数。
5、该语句将无限地执行下去,直到你强制退出
for的中间语句是一个表达式,表达式值非零则继续循环
表达式值为零则结束循环
x=3也是一个表达式,该表达式的值就是3,所以会无限循环下去 (你也可以通过 int y; cout << (y=9) << endl; 这两条语句测试一下)
6、单引号在字符串中不用转意,单引号在语法中是用来表示一个字符的,而在一个字符串中一定不可能会用单引号来标识字符,因为这是字符串!
所以在字符串中,单引号不用转义。当然你使用转义后的单引号也完全可以。即在字符串中, ' 和 \' 的效果一样。
7、表达式 i++>i 的值一定是false。因为后置的++都是先使用原来的值,然后才自加。遇到类似这样的问题你可以这么理解:
后置自加,自加是在++出现的语句的分号(逗号)之后。例如i++>i这个,你可以不管三七二十一,先把++拿掉 得到 i > i (false)
最后在这个包含 i++>i 的一句话执行完以后(逗号或分号以后), 再来对 i = i + 1;
8、strcmp函数返回的是一个int值。当两字符串相等时返回0,不等时返回非0
"abcde" 和 "bcdef" 是一对不等的字符串,无论比较的时候是a在前还是b在前,strcmp函数都将返回非0值。
这个非0值又将以一个bool类型返回,非0既是true,true的值是1。所以无论是strcmp(a,b)还是strcmp(b,a),输出结果都是1。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询