1 如果没有多态和虚拟继承,在C++中,struct和class的存取效率完全相同!简单的说就是,存取class的data member和非virtual function效率和struct完全相同!不管该data member是定义在基类还是派生类的。 2 这个话题可能是非常简单的,两者都是用户自定数据类型,但是我们都知道当声明一个struct时,如果我们在struct中没有定义访问修饰符,struct中所有的成员(数据和函数)默认都是public访问修饰符;如果在Class没有定义访问修饰符,class中所有的成员(数据和函数)默认都是private访问修饰符。这也是他们之间唯一的区别。 如果你是一个语言的设计者,你会设计这样的两个类型吗?我想不会,因为它们之间完全没有正交性,这样的设计是冗余的。那么问题就是为什么在C++中存在struct?很多人都会想到这是为了让C++和C兼容,那么问题就是如何使用C++中的struct和C兼容起来。 把C++要交换到C程序的数据在C++程序中声明成一个struct,然后根据C++中程序的语意选择继承或者聚合这个struct,然后在使用的时候就可以把这个struct封装起来传递到C中或者从C中传递到C++。(注:在深入探索C++对象模型中建议使用聚合,而不是继承,原因是为了和C语言的空间分布兼容,因为在C++引入虚函数,虚继承导致了派生类的空间包括struct的空间和vptr、vbtl,而且vptr、vbtl存放在哪里由编译器自己决定,C++标准中没有定义)。 给出一个从C++到C语言的一个简单的例子: //C++头文件moduleA.h #ifndef MODULE_A_H #define MODULE_A_H struct person { int age; char name[20]; };
class male { private: int wife; struct person per; public: int getAge() { return per.age; } }; extern "C" void print(person ); #endif //C++的实现文件 #i nclude "moduleA.h" #i nclude <stdio.h> void print(person per) { printf("age :%d, /n",per.age); return ; } /*待处理的C语言文件*/ #i nclude <stdio.h> extern "C" { #i nclude "moduleA.h" //或者只要这个也能通过编译 } int main(void) { person per; per.age = 18; print(per); return 0; } 3 1、struct不允许显示声明其无参数构造函数,这不同于class 下面列举出微软提供的例子供大家学习
//
Copyright (C) 2000 Microsoft Corporation. All rights reserved.
// struct2.cs using System; class TheClass { public int x; } struct TheStruct { public int x; } class TestClass { public static void structtaker(TheStruct s) { s.x = 5; } public static void classtaker(TheClass c) { c.x = 5; } public static void Main() { TheStruct a = new TheStruct(); TheClass b = new TheClass(); a.x = 1; b.x = 1; structtaker(a); classtaker(b); Console.WriteLine("a.x = {0}", a.x); Console.WriteLine("b.x = {0}", b.x); } }
|
struct和class的区别
最新推荐文章于 2024-06-29 20:03:58 发布
struct和class的区别
这个主页不错 里面的INF..DLL资料都还不错
2007-06-30 13:24