C 和C++间struct 的深层区别
来源:互联网 发布:kali linux fcitx安装 编辑:程序博客网 时间:2024/06/16 03:49
C 和C++间struct 的深层区别
在C++语言中struct 具有了“类” 的功能,其与关键字class 的区别在于struct 中成员变量和函数的默认访问权限为public,而class 的为private。
例如,定义struct 类和class 类:
struct structA
{
char a;
…
}
class classB
{
char a;
…
}
则:
structA a;
a.a = 'a'; //访问public 成员,合法
classB b;
b.a = 'a'; //访问private 成员,不合法
许多文献写到这里就认为已经给出了C++中struct 和class 的全部区别,实则不然,另外一点需要注意的是:C++中的struct 保持了对C 中struct 的全面兼容(这符合C++的初衷——“a better c”),因而,下面的操作是合法的:
//定义struct
struct structA
{
char a;
char b;
int c;
};
structA a = {'a' , 'a' ,1}; // 定义时直接赋初值
即struct 可以在定义的时候直接以{ }对其成员变量赋初值,而class 则不能,在经典书目《thinking C++ 2nd edition》中作者对此点进行了强调。
struct 编程注意事项
看看下面的程序:
1. #include <iostream.h>
2. struct structA
3. {
4. int iMember;
5. char *cMember;
6. };
7. int main(int argc, char* argv[])
8.{
9. structA instant1,instant2;
10. char c = 'a';
11. instant1.iMember = 1;
12. instant1.cMember = &c;
13. instant2 = instant1;
14. cout << *(instant1.cMember) << endl;
15. *(instant2.cMember) = 'b';
16. cout << *(instant1.cMember) << endl;
17. return 0;
18. }
14 行的输出结果是:a
16 行的输出结果是:b
Why?我们在15 行对instant2 的修改改变了instant1 中成员的值!原因在于13 行的instant2 = instant1 赋值语句采用的是变量逐个拷贝,这样instant1的cMember指针变量的值拷贝给instant1的cMember,这使得instant1 和instant2 中的cMember(一样)指向了同一片内存,因而对instant2 的修改也是对instant1 的修改。
在C 语言中,当结构体中存在指针型成员时,一定要注意在采用赋值语句时是否将2 个实例中的指针型成员指向了同一片内存。
在C++语言中,当结构体中存在指针型成员时,我们需要重写struct 的拷贝构造函数并进行“=”操作符重载。
- C和C++间struct的深层区别
- C 和C++间struct 的深层区别
- C和C++间struct的深层区别
- C/C++struct的深层区别
- C和C++中的struct的区别
- C#struct和class的区别
- c++和c里面struct的区别
- C 和 C++中struct 的区别
- c 和c++ struct之间的区别
- C和C++的struct区别
- [C#]class和struct的区别
- 【C++】class和struct的区别
- C和C++中struct的区别
- C#中struct和C中的struct的一个区别
- C语言中struct和typedef struct的区别
- C/C++中typedef struct和struct的区别
- C语言struct和typedef struct的区别
- C/C+语言struct深层探索
- 给中国学生的第二封信——从优秀到卓越 李开复
- Windows应用程序C#创建MDI父窗体和子窗体
- 中国软件业的机会——抓住机遇、挑战未来
- 用友软件出错解决方案。如:SA口令被更改或系统错误,系统将退出 错误编号:-2147024770错误描述:Automation 错误
- SQLServer常见问题(1)
- C 和C++间struct 的深层区别
- 透明背景色的可定制移动文字的Label控件
- 面向 PHP 开发人员的 XML
- 一道AutoDesk笔试题
- CIO执行力不够,怎么办?
- C++与Java比较
- 远离亚健康 如何做一个活力四射的CIO?
- 工作真难找啊
- 关于google adsense新的广告格式