C结构体、C++结构体 和 C++类的区别

时间:2022-06-06 12:50:46
C结构体、C++结构体 和 C++类的区别,网上有些区别并不是很全,有些都是错的。。。

92 个解决方案

#1


C结构体、C++结构体基本相同,C++类主要是方法的实现。
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法

#2


引用 1 楼  的回复:
C结构体、C++结构体基本相同,C++类主要是方法的实现。
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法


说的太浅显了,一般学过C和C++的人都知道。。不过还是谢谢你哈,。。

#3


引用 2 楼  的回复:
引用 1 楼  的回复:

C结构体、C++结构体基本相同,C++类主要是方法的实现。
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法


说的太浅显了,一般学过C和C++的人都知道。。不过还是谢谢你哈,。。

什么是深?涉及到内存分配?默认访问权限?还是使用场合分析?不过你都可以百度下。

#4


C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

#5


引用 4 楼  的回复:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。

#6


结构体是数据定义

类除了数据定义之外,还有对事物的抽象。
涉及到OO思想.

#7


结构体 是一堆各种类型各种数据的集合, 常增加一个 结构体指针变量, 制作链表。
结构体中的数据,是可以直接访问的

类 ≈ 结构体 + 方法,不过 类中的数据成员一般都是私有的,不可直接访问的,需要通过方法来读或改。

方法就是一堆函数,构造 析构 各种功能函数。

面向对象的编程,就是面向类的编程,最主要的就是那些成员函数,方法的实现。..

#8


引用 5 楼  的回复:
引用 4 楼  的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。

#9


看深入浅出MFC  有类怎么实现的讲解
引用 8 楼  的回复:
引用 5 楼 的回复:

引用 4 楼 的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。

#10


引用 9 楼  的回复:
看深入浅出MFC  有类怎么实现的讲解
引用 8 楼  的回复:
引用 5 楼 的回复:

引用 4 楼 的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。……


谢谢这位。

#11


引用 9 楼  的回复:
看深入浅出MFC  有类怎么实现的讲解
引用 8 楼  的回复:
引用 5 楼 的回复:

引用 4 楼 的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。……


哪有?

#12


C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类

#13


C结构体与C++结构体区别
C结构体只是一个复杂数据类型,只能定义成员变量,不能定义成员函数(不要跟我说函数指针),不能用于面向对象编程

C++中 struct 与 class的区别:对于成员访问权限以及继承方式,class中默认的是private,而struct中则是public.class还可以用于表示模板类型,struct则不行。

#14


struct是没有继承,多态的class,其中也有函数可以写的。
struct默认public,class默认private

#15


12 14楼,自己确定的东西才能说,不确定就要试过之后再说。
最终还是不确定,也要以建议的方式发表自己的意见。

#include <iostream>
using namespace std;

struct A {
public:
 A () {}
 virtual void dynamic(){
 cout << "A" << endl;
 }
protected:
void fun1(){}
private:
int m_nData;

};

struct B : A{
public:
virtual void dynamic() {
cout << "B" << endl;
}
};
int main(void)
{
A* pb=new B;
pb->dynamic();


}

#16


引用 14 楼  的回复:
struct是没有继承,多态的class,其中也有函数可以写的。
struct默认public,class默认private


struct是没有继承??没有搞错吧?C++里面的struct是可以继承的。。。

#17


C++ 类有 vtable

#18


引用 4 楼  的回复:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++

#19


引用 4 楼  的回复:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++

#20


引用 19 楼  的回复:
引用 4 楼  的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++


别++了,我很确定的告诉你们,这不是唯一的区别,还有其他的区别。。好好看书去吧。。。

#21


引用 20 楼  的回复:
引用 19 楼  的回复:

引用 4 楼  的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++


别++了,我很确定的告诉你们,这不是唯一的区别,还有其他的区别。。好好看书去吧。。。


求指教。。。

#22


C++结构体在大多数编译器下被认作为全public类处理

#23


概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
关系:struct既不能继承也不能被继承,但是可以实现接口,而Class就可以完全扩展了。内部结构有区别,struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例字段。
代码:
static void Main(string[] args)
        {
            int strNumberA = 100;
            int strNumberB = strNumberA;//编译器会先复制strNumberA的值,后赋给strNumberB,会在内存的两个地方储存值100

            MyVector vA = new MyVector();
            MyVector vB = vA;//引用变量的赋值 赋值操作完成后,两个变量都指向同一内存地址 
            vA.Value = 100;
            Console.WriteLine(vA.Value + "  等于  " + vB.Value);//由于vA和vB指向同一内存地址,所以vB.Value的值也为100  
            vB.Value = 200;
            Console.WriteLine(vA.Value + "  等于  " + vB.Value);//同理vA.Value =vB.Value 
             
            MyStruct structA = new MyStruct();
            MyStruct structB = structA; //结构是值类型 赋值操作完成后,两个结构中的结构信息一致。注意是“结构中的信息”一致。 
            structA.Value = 100;
            structB.Value = 200;
            Console.WriteLine(structA.Value + "  不等于  " + structB.Value);//同理vA.Value !=vB.Value 
            Console.Read();
        }
        private class MyVector
        {
            public int Value { get; set; }
        }
        private struct MyStruct
        {
            public int Value;
        }  
 
例子可以看出,值类型变量的赋值操作,仅仅是2个实际数据之间的复制。而引用类型变量的赋值操作,复制的是引用,即内存地址,由于赋值后二者都指向同一内存地址,所以改变其中一个,另一个也会跟着改变。
结构体引出的问题:上面说到值类型的内存不由垃圾回收控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,因此具有性能上的优势。例如,通常struct比class更高效;而引用类型的内存回收,有垃圾回收机制控制。这就引出了关于.NET内存中的堆和栈的讨论 。李建忠老师发了一条关于Class性能好还是Struct性能好(换言堆性能好?还是栈性能好?)的话题微博 ,具体http://www.cnblogs.com/zoupeiyang/archive/2011/07/20/2112163.html,这里不讨论了。那么什么时机该用呢 ,比较struct和class的不同,以下是我的个人理解,
(1.在表示诸如点、矩形等主要用来存储数据的轻量级对象时,首选struct。
(2 在表示数据量大、逻辑复杂的大对象时,首选class。
(3 在表现抽象和多级别的对象层次时,class是最佳选择 
引用 20 楼  的回复:
引用 19 楼 的回复:

引用 4 楼 的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++


别++了,我很确定的告诉你们,这不是唯一的区别,还有其他的区别。。好好看书去吧。。。

#24


c++的struct和c的没什么区别的 个人理解
引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,……

#25


引用 24 楼  的回复:
c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈……

那你就错了,区别还是有的,比如C中的struct不能有函数,但C++中却有。还有好几中区别,这得慢慢体会。

#26


谢谢,有点道理,但是 struct既不能继承也不能被继承这话是错的,struct不仅能继承也能被继承。
引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象……

#27


白猫黑猫,能抓老鼠的就是好猫。实际情况中用用吧。

#28


嗯嗯嗯 这个确实错了
之前一直没发现 没用struct继承过 
看来要写写代码实践才知道 谢谢 了
引用 26 楼  的回复:
谢谢,有点道理,但是struct既不能继承也不能被继承这话是错的,struct不仅能继承也能被继承。

引用 23 楼 的回复:

概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因……

#29


引用 25 楼  的回复:
引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用……

C中的struct不能有函数
真的不能有?
函数指针听说过没?
看看下面的代码,你可以试试编译运行。

#include <stdio.h>
//几个用于测试的函数 
int max(int a, int b)
{
return a>b?a:b; 
}

int min(int a, int b)
{
return a<b?a:b; 


//结构体 
struct func
{
  int (*max)(int, int);//函数指针 
  int (*min)(int, int);
};

typedef struct func func; //添加别名 

void init(func *data)
{
data->max = max;//初始化函数指针 
data->min = min; 


int main()
{
int a, b; 
func test;

init(&test); //初始化,你可以说它是构造函数 

a = test.max(100, 215);
b = test.min(64, 42); 

printf("result:\nmax: %d\nmin: %d\n", a, b); 
return 0; 




只不过,需要自己写函数,对结构体进行初始化,把函数地址赋给结构体里的函数指针。

C的结构体,初始化和销毁需要自己调用函数进行。
而C++的类,有构造函数,析构函数,一般不需要另外再写个函数进行构造/析构。



#30


引用 29 楼  的回复:
引用 25 楼  的回复:

引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用……

纠正一下:
只是模拟 结构体有函数 的效果。

#31


各种高手………………

#32


在C++里面,struct和class没区别...只是换了一个名字而已

#33


引用 32 楼  的回复:
在C++里面,struct和class没区别...只是换了一个名字而已

严重同意

#34


struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
引用 33 楼  的回复:
引用 32 楼 的回复:
在C++里面,struct和class没区别...只是换了一个名字而已

严重同意

#35


C++里struct和class只有语法上的差别,没有功能性的差别,一样是可以构建对象的,当然像00的那些特征也不在话下。

#36


引用 29 楼  的回复:
引用 25 楼  的回复:

引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用……



struct func
{
  int (*max)(int, int);//函数指针 
  int (*min)(int, int);
};

#37


引用 29 楼  的回复:
引用 25 楼  的回复:

引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用……


C中的struct不能有函数
真的不能有?
函数指针听说过没?

C里面的struct是不能有函数定义的!函数指针是函数定义吗??
//结构体 
struct func
{
  int (*max)(int, int);//函数指针 
  int (*min)(int, int);
};


你这里面的就不是函数,只是一个指向函数的指针,这和普通的int *p指针有什么区别呢?无非就是指向函数的。。。
所以你还是你理解。。


#38


引用 30 楼  的回复:
引用 29 楼  的回复:

引用 25 楼  的回复:

引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:st……


大哥大姐,那不是函数。。。是函数指针!
#include <stdio.h>

//结构体 
struct func
{
   int max(int a, int b){
     return a>b?a:b; 
}

int min(int a, int b){
     return a<b?a:b; 


};

typedef struct func func; //添加别名 


int main(){
   
    return 0; 



这里面才是函数,注意文件后缀是.c,现在你去编译一下,看能不能通过!下面是gcc编译器报错

--------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------

检查文件依赖性...
正在编译 F:\WYP\编程面试常考知识点\1.c...
[Error] F:\WYP\编程面试常考知识点\1.c:6: error: field `max' declared as a function
[Warning] F:\WYP\编程面试常考知识点\1.c:6: warning: no semicolon at end of struct or union
[Error] F:\WYP\编程面试常考知识点\1.c:6: error: syntax error before '{' token
[Error] F:\WYP\编程面试常考知识点\1.c:14: error: syntax error before '}' token

构建中止 1: 3 个错误, 1 个警告


#39


引用 8 楼  的回复:
引用 5 楼  的回复:

引用 4 楼  的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。

肯定行啊

#40


引用 32 楼  的回复:
在C++里面,struct和class没区别...只是换了一个名字而已


不同意,大部分是一样的,但是在C++里面,struct和class还有是一点点区别的。

#41


C的struct里边的内容只能是成员变量,不能是方法,而且所有内容没有可见属性(public,private...)

C++的struct和class的唯一区别就是前者缺省是public而后者缺省是private,如果显式的指定所有成员的可见属性,则二者绝无其它任何差异

#42


引用 4 楼  的回复:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

同意!

#43


同意你的看法
函数指针也只是指针
引用 37 楼  的回复:
引用 29 楼 的回复:

引用 25 楼 的回复:

引用 24 楼 的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼 的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是……

#44


我来说一下C++中的struct和class。
请看《c++ Primer》一书的阐述:
C++ supports a second keyword,  struct, that can be used to define class types. The struct keywords is inherited from C.
If we define a class using the class keyword, then any members defined  before the first access label are implicitly private; if we use the struct keyword, then those members are public. Whether we define a class using the class keyword or the struct keyword affects only the default initial access level.
由此可见,两个关键字都是用来定义class的, 唯一的区别就是默认的成员访问权限不同。在第一个访问标签之前定义的成员,在struct中默认为public,在class中默认为private。可以说,c++中的struct和class实际上是同一种类型。至于class支持的继承、多态等特性struct当然可以使用。

#45


引用 41 楼  的回复:
C的struct里边的内容只能是成员变量,不能是方法,而且所有内容没有可见属性(public,private...)

C++的struct和class的唯一区别就是前者缺省是public而后者缺省是private,如果显式的指定所有成员的可见属性,则二者绝无其它任何差异


同意该观点。

#46


C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类

#47


引用 40 楼  的回复:
引用 32 楼 的回复:

在C++里面,struct和class没区别...只是换了一个名字而已


不同意,大部分是一样的,但是在C++里面,struct和class还有是一点点区别的。

区别就是一个默认是public,一个是private,C++里面引入struct只是为了使C程序员能更好的迁移到C++.

#48


引用 46 楼  的回复:
C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类


C++的struct也可以有private,protected修饰。

#49


如果是C的结构体,可以保证结构体的首地址就是其第一个成员的首地址。C++好像不能保证。

#50


由此,我们可以进一步理解C的裸奔特性。

#1


C结构体、C++结构体基本相同,C++类主要是方法的实现。
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法

#2


引用 1 楼  的回复:
C结构体、C++结构体基本相同,C++类主要是方法的实现。
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法


说的太浅显了,一般学过C和C++的人都知道。。不过还是谢谢你哈,。。

#3


引用 2 楼  的回复:
引用 1 楼  的回复:

C结构体、C++结构体基本相同,C++类主要是方法的实现。
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法


说的太浅显了,一般学过C和C++的人都知道。。不过还是谢谢你哈,。。

什么是深?涉及到内存分配?默认访问权限?还是使用场合分析?不过你都可以百度下。

#4


C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

#5


引用 4 楼  的回复:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。

#6


结构体是数据定义

类除了数据定义之外,还有对事物的抽象。
涉及到OO思想.

#7


结构体 是一堆各种类型各种数据的集合, 常增加一个 结构体指针变量, 制作链表。
结构体中的数据,是可以直接访问的

类 ≈ 结构体 + 方法,不过 类中的数据成员一般都是私有的,不可直接访问的,需要通过方法来读或改。

方法就是一堆函数,构造 析构 各种功能函数。

面向对象的编程,就是面向类的编程,最主要的就是那些成员函数,方法的实现。..

#8


引用 5 楼  的回复:
引用 4 楼  的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。

#9


看深入浅出MFC  有类怎么实现的讲解
引用 8 楼  的回复:
引用 5 楼 的回复:

引用 4 楼 的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。

#10


引用 9 楼  的回复:
看深入浅出MFC  有类怎么实现的讲解
引用 8 楼  的回复:
引用 5 楼 的回复:

引用 4 楼 的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。……


谢谢这位。

#11


引用 9 楼  的回复:
看深入浅出MFC  有类怎么实现的讲解
引用 8 楼  的回复:
引用 5 楼 的回复:

引用 4 楼 的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。……


哪有?

#12


C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类

#13


C结构体与C++结构体区别
C结构体只是一个复杂数据类型,只能定义成员变量,不能定义成员函数(不要跟我说函数指针),不能用于面向对象编程

C++中 struct 与 class的区别:对于成员访问权限以及继承方式,class中默认的是private,而struct中则是public.class还可以用于表示模板类型,struct则不行。

#14


struct是没有继承,多态的class,其中也有函数可以写的。
struct默认public,class默认private

#15


12 14楼,自己确定的东西才能说,不确定就要试过之后再说。
最终还是不确定,也要以建议的方式发表自己的意见。

#include <iostream>
using namespace std;

struct A {
public:
 A () {}
 virtual void dynamic(){
 cout << "A" << endl;
 }
protected:
void fun1(){}
private:
int m_nData;

};

struct B : A{
public:
virtual void dynamic() {
cout << "B" << endl;
}
};
int main(void)
{
A* pb=new B;
pb->dynamic();


}

#16


引用 14 楼  的回复:
struct是没有继承,多态的class,其中也有函数可以写的。
struct默认public,class默认private


struct是没有继承??没有搞错吧?C++里面的struct是可以继承的。。。

#17


C++ 类有 vtable

#18


引用 4 楼  的回复:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++

#19


引用 4 楼  的回复:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++

#20


引用 19 楼  的回复:
引用 4 楼  的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++


别++了,我很确定的告诉你们,这不是唯一的区别,还有其他的区别。。好好看书去吧。。。

#21


引用 20 楼  的回复:
引用 19 楼  的回复:

引用 4 楼  的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++


别++了,我很确定的告诉你们,这不是唯一的区别,还有其他的区别。。好好看书去吧。。。


求指教。。。

#22


C++结构体在大多数编译器下被认作为全public类处理

#23


概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
关系:struct既不能继承也不能被继承,但是可以实现接口,而Class就可以完全扩展了。内部结构有区别,struct只能添加带参的构造函数,不能使用abstract和protected等修饰符,不能初始化实例字段。
代码:
static void Main(string[] args)
        {
            int strNumberA = 100;
            int strNumberB = strNumberA;//编译器会先复制strNumberA的值,后赋给strNumberB,会在内存的两个地方储存值100

            MyVector vA = new MyVector();
            MyVector vB = vA;//引用变量的赋值 赋值操作完成后,两个变量都指向同一内存地址 
            vA.Value = 100;
            Console.WriteLine(vA.Value + "  等于  " + vB.Value);//由于vA和vB指向同一内存地址,所以vB.Value的值也为100  
            vB.Value = 200;
            Console.WriteLine(vA.Value + "  等于  " + vB.Value);//同理vA.Value =vB.Value 
             
            MyStruct structA = new MyStruct();
            MyStruct structB = structA; //结构是值类型 赋值操作完成后,两个结构中的结构信息一致。注意是“结构中的信息”一致。 
            structA.Value = 100;
            structB.Value = 200;
            Console.WriteLine(structA.Value + "  不等于  " + structB.Value);//同理vA.Value !=vB.Value 
            Console.Read();
        }
        private class MyVector
        {
            public int Value { get; set; }
        }
        private struct MyStruct
        {
            public int Value;
        }  
 
例子可以看出,值类型变量的赋值操作,仅仅是2个实际数据之间的复制。而引用类型变量的赋值操作,复制的是引用,即内存地址,由于赋值后二者都指向同一内存地址,所以改变其中一个,另一个也会跟着改变。
结构体引出的问题:上面说到值类型的内存不由垃圾回收控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,因此具有性能上的优势。例如,通常struct比class更高效;而引用类型的内存回收,有垃圾回收机制控制。这就引出了关于.NET内存中的堆和栈的讨论 。李建忠老师发了一条关于Class性能好还是Struct性能好(换言堆性能好?还是栈性能好?)的话题微博 ,具体http://www.cnblogs.com/zoupeiyang/archive/2011/07/20/2112163.html,这里不讨论了。那么什么时机该用呢 ,比较struct和class的不同,以下是我的个人理解,
(1.在表示诸如点、矩形等主要用来存储数据的轻量级对象时,首选struct。
(2 在表示数据量大、逻辑复杂的大对象时,首选class。
(3 在表现抽象和多级别的对象层次时,class是最佳选择 
引用 20 楼  的回复:
引用 19 楼 的回复:

引用 4 楼 的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

++


别++了,我很确定的告诉你们,这不是唯一的区别,还有其他的区别。。好好看书去吧。。。

#24


c++的struct和c的没什么区别的 个人理解
引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,……

#25


引用 24 楼  的回复:
c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈……

那你就错了,区别还是有的,比如C中的struct不能有函数,但C++中却有。还有好几中区别,这得慢慢体会。

#26


谢谢,有点道理,但是 struct既不能继承也不能被继承这话是错的,struct不仅能继承也能被继承。
引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象……

#27


白猫黑猫,能抓老鼠的就是好猫。实际情况中用用吧。

#28


嗯嗯嗯 这个确实错了
之前一直没发现 没用struct继承过 
看来要写写代码实践才知道 谢谢 了
引用 26 楼  的回复:
谢谢,有点道理,但是struct既不能继承也不能被继承这话是错的,struct不仅能继承也能被继承。

引用 23 楼 的回复:

概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因……

#29


引用 25 楼  的回复:
引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用类型,因此它们具有所有值类型和引用……

C中的struct不能有函数
真的不能有?
函数指针听说过没?
看看下面的代码,你可以试试编译运行。

#include <stdio.h>
//几个用于测试的函数 
int max(int a, int b)
{
return a>b?a:b; 
}

int min(int a, int b)
{
return a<b?a:b; 


//结构体 
struct func
{
  int (*max)(int, int);//函数指针 
  int (*min)(int, int);
};

typedef struct func func; //添加别名 

void init(func *data)
{
data->max = max;//初始化函数指针 
data->min = min; 


int main()
{
int a, b; 
func test;

init(&test); //初始化,你可以说它是构造函数 

a = test.max(100, 215);
b = test.min(64, 42); 

printf("result:\nmax: %d\nmin: %d\n", a, b); 
return 0; 




只不过,需要自己写函数,对结构体进行初始化,把函数地址赋给结构体里的函数指针。

C的结构体,初始化和销毁需要自己调用函数进行。
而C++的类,有构造函数,析构函数,一般不需要另外再写个函数进行构造/析构。



#30


引用 29 楼  的回复:
引用 25 楼  的回复:

引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用……

纠正一下:
只是模拟 结构体有函数 的效果。

#31


各种高手………………

#32


在C++里面,struct和class没区别...只是换了一个名字而已

#33


引用 32 楼  的回复:
在C++里面,struct和class没区别...只是换了一个名字而已

严重同意

#34


struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
引用 33 楼  的回复:
引用 32 楼 的回复:
在C++里面,struct和class没区别...只是换了一个名字而已

严重同意

#35


C++里struct和class只有语法上的差别,没有功能性的差别,一样是可以构建对象的,当然像00的那些特征也不在话下。

#36


引用 29 楼  的回复:
引用 25 楼  的回复:

引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用……



struct func
{
  int (*max)(int, int);//函数指针 
  int (*min)(int, int);
};

#37


引用 29 楼  的回复:
引用 25 楼  的回复:

引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是值类型,class是引用……


C中的struct不能有函数
真的不能有?
函数指针听说过没?

C里面的struct是不能有函数定义的!函数指针是函数定义吗??
//结构体 
struct func
{
  int (*max)(int, int);//函数指针 
  int (*min)(int, int);
};


你这里面的就不是函数,只是一个指向函数的指针,这和普通的int *p指针有什么区别呢?无非就是指向函数的。。。
所以你还是你理解。。


#38


引用 30 楼  的回复:
引用 29 楼  的回复:

引用 25 楼  的回复:

引用 24 楼  的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼  的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:st……


大哥大姐,那不是函数。。。是函数指针!
#include <stdio.h>

//结构体 
struct func
{
   int max(int a, int b){
     return a>b?a:b; 
}

int min(int a, int b){
     return a<b?a:b; 


};

typedef struct func func; //添加别名 


int main(){
   
    return 0; 



这里面才是函数,注意文件后缀是.c,现在你去编译一下,看能不能通过!下面是gcc编译器报错

--------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------

检查文件依赖性...
正在编译 F:\WYP\编程面试常考知识点\1.c...
[Error] F:\WYP\编程面试常考知识点\1.c:6: error: field `max' declared as a function
[Warning] F:\WYP\编程面试常考知识点\1.c:6: warning: no semicolon at end of struct or union
[Error] F:\WYP\编程面试常考知识点\1.c:6: error: syntax error before '{' token
[Error] F:\WYP\编程面试常考知识点\1.c:14: error: syntax error before '}' token

构建中止 1: 3 个错误, 1 个警告


#39


引用 8 楼  的回复:
引用 5 楼  的回复:

引用 4 楼  的回复:

C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。


++
知道这么多就差不多了。


知道这些肯定不行啊。。。

肯定行啊

#40


引用 32 楼  的回复:
在C++里面,struct和class没区别...只是换了一个名字而已


不同意,大部分是一样的,但是在C++里面,struct和class还有是一点点区别的。

#41


C的struct里边的内容只能是成员变量,不能是方法,而且所有内容没有可见属性(public,private...)

C++的struct和class的唯一区别就是前者缺省是public而后者缺省是private,如果显式的指定所有成员的可见属性,则二者绝无其它任何差异

#42


引用 4 楼  的回复:
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。

同意!

#43


同意你的看法
函数指针也只是指针
引用 37 楼  的回复:
引用 29 楼 的回复:

引用 25 楼 的回复:

引用 24 楼 的回复:

c++的struct和c的没什么区别的 个人理解引用 23 楼 的回复:
概念:class和struct的语法基本相同,从声明到使用,都很相似。但是struct的约束要比class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不一定做的到。
类型:struct是……

#44


我来说一下C++中的struct和class。
请看《c++ Primer》一书的阐述:
C++ supports a second keyword,  struct, that can be used to define class types. The struct keywords is inherited from C.
If we define a class using the class keyword, then any members defined  before the first access label are implicitly private; if we use the struct keyword, then those members are public. Whether we define a class using the class keyword or the struct keyword affects only the default initial access level.
由此可见,两个关键字都是用来定义class的, 唯一的区别就是默认的成员访问权限不同。在第一个访问标签之前定义的成员,在struct中默认为public,在class中默认为private。可以说,c++中的struct和class实际上是同一种类型。至于class支持的继承、多态等特性struct当然可以使用。

#45


引用 41 楼  的回复:
C的struct里边的内容只能是成员变量,不能是方法,而且所有内容没有可见属性(public,private...)

C++的struct和class的唯一区别就是前者缺省是public而后者缺省是private,如果显式的指定所有成员的可见属性,则二者绝无其它任何差异


同意该观点。

#46


C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类

#47


引用 40 楼  的回复:
引用 32 楼 的回复:

在C++里面,struct和class没区别...只是换了一个名字而已


不同意,大部分是一样的,但是在C++里面,struct和class还有是一点点区别的。

区别就是一个默认是public,一个是private,C++里面引入struct只是为了使C程序员能更好的迁移到C++.

#48


引用 46 楼  的回复:
C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类


C++的struct也可以有private,protected修饰。

#49


如果是C的结构体,可以保证结构体的首地址就是其第一个成员的首地址。C++好像不能保证。

#50


由此,我们可以进一步理解C的裸奔特性。