92 个解决方案
#1
C结构体、C++结构体基本相同,C++类主要是方法的实现。
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法
#2
说的太浅显了,一般学过C和C++的人都知道。。不过还是谢谢你哈,。。
#3
什么是深?涉及到内存分配?默认访问权限?还是使用场合分析?不过你都可以百度下。
#4
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。
#5
++
知道这么多就差不多了。
#6
结构体是数据定义
类除了数据定义之外,还有对事物的抽象。
涉及到OO思想.
类除了数据定义之外,还有对事物的抽象。
涉及到OO思想.
#7
结构体 是一堆各种类型各种数据的集合, 常增加一个 结构体指针变量, 制作链表。
结构体中的数据,是可以直接访问的
类 ≈ 结构体 + 方法,不过 类中的数据成员一般都是私有的,不可直接访问的,需要通过方法来读或改。
方法就是一堆函数,构造 析构 各种功能函数。
面向对象的编程,就是面向类的编程,最主要的就是那些成员函数,方法的实现。..
结构体中的数据,是可以直接访问的
类 ≈ 结构体 + 方法,不过 类中的数据成员一般都是私有的,不可直接访问的,需要通过方法来读或改。
方法就是一堆函数,构造 析构 各种功能函数。
面向对象的编程,就是面向类的编程,最主要的就是那些成员函数,方法的实现。..
#8
知道这些肯定不行啊。。。
#9
看深入浅出MFC 有类怎么实现的讲解
#10
谢谢这位。
#11
哪有?
#12
C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类
C++的struct是一个全public的类...
C++的class是可以有private和protected的类
#13
C结构体与C++结构体区别
C结构体只是一个复杂数据类型,只能定义成员变量,不能定义成员函数(不要跟我说函数指针),不能用于面向对象编程
C++中 struct 与 class的区别:对于成员访问权限以及继承方式,class中默认的是private,而struct中则是public.class还可以用于表示模板类型,struct则不行。
C结构体只是一个复杂数据类型,只能定义成员变量,不能定义成员函数(不要跟我说函数指针),不能用于面向对象编程
C++中 struct 与 class的区别:对于成员访问权限以及继承方式,class中默认的是private,而struct中则是public.class还可以用于表示模板类型,struct则不行。
#14
struct是没有继承,多态的class,其中也有函数可以写的。
struct默认public,class默认private
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
struct是没有继承??没有搞错吧?C++里面的struct是可以继承的。。。
#17
C++ 类有 vtable
#18
++
#19
++
#20
别++了,我很确定的告诉你们,这不是唯一的区别,还有其他的区别。。好好看书去吧。。。
#21
求指教。。。
#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是最佳选择
类型: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是最佳选择
#24
c++的struct和c的没什么区别的 个人理解
#25
那你就错了,区别还是有的,比如C中的struct不能有函数,但C++中却有。还有好几中区别,这得慢慢体会。
#26
谢谢,有点道理,但是
struct既不能继承也不能被继承这话是错的,struct不仅能继承也能被继承。
#27
白猫黑猫,能抓老鼠的就是好猫。实际情况中用用吧。
#28
嗯嗯嗯 这个确实错了
之前一直没发现 没用struct继承过
看来要写写代码实践才知道 谢谢 了
之前一直没发现 没用struct继承过
看来要写写代码实践才知道 谢谢 了
#29
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
纠正一下:
只是模拟 结构体有函数 的效果。
#31
各种高手………………
#32
在C++里面,struct和class没区别...只是换了一个名字而已
#33
严重同意
#34
struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
#35
C++里struct和class只有语法上的差别,没有功能性的差别,一样是可以构建对象的,当然像00的那些特征也不在话下。
#36
struct func
{
int (*max)(int, int);//函数指针
int (*min)(int, int);
};
#37
C中的struct不能有函数
真的不能有?
函数指针听说过没?
C里面的struct是不能有函数定义的!函数指针是函数定义吗??
//结构体
struct func
{
int (*max)(int, int);//函数指针
int (*min)(int, int);
};
你这里面的就不是函数,只是一个指向函数的指针,这和普通的int *p指针有什么区别呢?无非就是指向函数的。。。
所以你还是你理解。。
#38
大哥大姐,那不是函数。。。是函数指针!
#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
肯定行啊
#40
不同意,大部分是一样的,但是在C++里面,struct和class还有是一点点区别的。
#41
C的struct里边的内容只能是成员变量,不能是方法,而且所有内容没有可见属性(public,private...)
C++的struct和class的唯一区别就是前者缺省是public而后者缺省是private,如果显式的指定所有成员的可见属性,则二者绝无其它任何差异
C++的struct和class的唯一区别就是前者缺省是public而后者缺省是private,如果显式的指定所有成员的可见属性,则二者绝无其它任何差异
#42
同意!
#43
同意你的看法
函数指针也只是指针
函数指针也只是指针
#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当然可以使用。
请看《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
同意该观点。
#46
C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类
C++的struct是一个全public的类...
C++的class是可以有private和protected的类
#47
区别就是一个默认是public,一个是private,C++里面引入struct只是为了使C程序员能更好的迁移到C++.
#48
C++的struct也可以有private,protected修饰。
#49
如果是C的结构体,可以保证结构体的首地址就是其第一个成员的首地址。C++好像不能保证。
#50
由此,我们可以进一步理解C的裸奔特性。
#1
C结构体、C++结构体基本相同,C++类主要是方法的实现。
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法
结构体是数据类型的集合
类是数据类型加方法的集合,基本如此,更注重方法
#2
说的太浅显了,一般学过C和C++的人都知道。。不过还是谢谢你哈,。。
#3
什么是深?涉及到内存分配?默认访问权限?还是使用场合分析?不过你都可以百度下。
#4
C 结构体,就是数据的集合,只有成员变量,没有方法。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。
C++ 结构体和 C++ 类基本一样,可以有成员变量,有方法, 唯一区别就是结构体成员默认访问控制为public,类为private。
#5
++
知道这么多就差不多了。
#6
结构体是数据定义
类除了数据定义之外,还有对事物的抽象。
涉及到OO思想.
类除了数据定义之外,还有对事物的抽象。
涉及到OO思想.
#7
结构体 是一堆各种类型各种数据的集合, 常增加一个 结构体指针变量, 制作链表。
结构体中的数据,是可以直接访问的
类 ≈ 结构体 + 方法,不过 类中的数据成员一般都是私有的,不可直接访问的,需要通过方法来读或改。
方法就是一堆函数,构造 析构 各种功能函数。
面向对象的编程,就是面向类的编程,最主要的就是那些成员函数,方法的实现。..
结构体中的数据,是可以直接访问的
类 ≈ 结构体 + 方法,不过 类中的数据成员一般都是私有的,不可直接访问的,需要通过方法来读或改。
方法就是一堆函数,构造 析构 各种功能函数。
面向对象的编程,就是面向类的编程,最主要的就是那些成员函数,方法的实现。..
#8
知道这些肯定不行啊。。。
#9
看深入浅出MFC 有类怎么实现的讲解
#10
谢谢这位。
#11
哪有?
#12
C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类
C++的struct是一个全public的类...
C++的class是可以有private和protected的类
#13
C结构体与C++结构体区别
C结构体只是一个复杂数据类型,只能定义成员变量,不能定义成员函数(不要跟我说函数指针),不能用于面向对象编程
C++中 struct 与 class的区别:对于成员访问权限以及继承方式,class中默认的是private,而struct中则是public.class还可以用于表示模板类型,struct则不行。
C结构体只是一个复杂数据类型,只能定义成员变量,不能定义成员函数(不要跟我说函数指针),不能用于面向对象编程
C++中 struct 与 class的区别:对于成员访问权限以及继承方式,class中默认的是private,而struct中则是public.class还可以用于表示模板类型,struct则不行。
#14
struct是没有继承,多态的class,其中也有函数可以写的。
struct默认public,class默认private
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
struct是没有继承??没有搞错吧?C++里面的struct是可以继承的。。。
#17
C++ 类有 vtable
#18
++
#19
++
#20
别++了,我很确定的告诉你们,这不是唯一的区别,还有其他的区别。。好好看书去吧。。。
#21
求指教。。。
#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是最佳选择
类型: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是最佳选择
#24
c++的struct和c的没什么区别的 个人理解
#25
那你就错了,区别还是有的,比如C中的struct不能有函数,但C++中却有。还有好几中区别,这得慢慢体会。
#26
谢谢,有点道理,但是
struct既不能继承也不能被继承这话是错的,struct不仅能继承也能被继承。
#27
白猫黑猫,能抓老鼠的就是好猫。实际情况中用用吧。
#28
嗯嗯嗯 这个确实错了
之前一直没发现 没用struct继承过
看来要写写代码实践才知道 谢谢 了
之前一直没发现 没用struct继承过
看来要写写代码实践才知道 谢谢 了
#29
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
纠正一下:
只是模拟 结构体有函数 的效果。
#31
各种高手………………
#32
在C++里面,struct和class没区别...只是换了一个名字而已
#33
严重同意
#34
struct是值类型,class是引用类型,因此它们具有所有值类型和引用类型之间的差异。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
效率:由于堆栈的执行效率要比堆的执行效率高,但是堆栈资源却很有限,不适合处理逻辑复杂的大对象,因此struct常用来处理作为基类型对待的小对象,而class来处理某个商业逻辑。
#35
C++里struct和class只有语法上的差别,没有功能性的差别,一样是可以构建对象的,当然像00的那些特征也不在话下。
#36
struct func
{
int (*max)(int, int);//函数指针
int (*min)(int, int);
};
#37
C中的struct不能有函数
真的不能有?
函数指针听说过没?
C里面的struct是不能有函数定义的!函数指针是函数定义吗??
//结构体
struct func
{
int (*max)(int, int);//函数指针
int (*min)(int, int);
};
你这里面的就不是函数,只是一个指向函数的指针,这和普通的int *p指针有什么区别呢?无非就是指向函数的。。。
所以你还是你理解。。
#38
大哥大姐,那不是函数。。。是函数指针!
#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
肯定行啊
#40
不同意,大部分是一样的,但是在C++里面,struct和class还有是一点点区别的。
#41
C的struct里边的内容只能是成员变量,不能是方法,而且所有内容没有可见属性(public,private...)
C++的struct和class的唯一区别就是前者缺省是public而后者缺省是private,如果显式的指定所有成员的可见属性,则二者绝无其它任何差异
C++的struct和class的唯一区别就是前者缺省是public而后者缺省是private,如果显式的指定所有成员的可见属性,则二者绝无其它任何差异
#42
同意!
#43
同意你的看法
函数指针也只是指针
函数指针也只是指针
#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当然可以使用。
请看《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
同意该观点。
#46
C的结构体就是一个结构体
C++的struct是一个全public的类...
C++的class是可以有private和protected的类
C++的struct是一个全public的类...
C++的class是可以有private和protected的类
#47
区别就是一个默认是public,一个是private,C++里面引入struct只是为了使C程序员能更好的迁移到C++.
#48
C++的struct也可以有private,protected修饰。
#49
如果是C的结构体,可以保证结构体的首地址就是其第一个成员的首地址。C++好像不能保证。
#50
由此,我们可以进一步理解C的裸奔特性。