C++ &和*结构和类的区别别是什么

  • C++中一般创建对象拷贝或赋值的方式有构造函数,拷贝构造函数赋值函数这三种方法。 构造函数就是当创建一个类的对象时它被调用来对类的数据成员进行初始化汾配内存。拷贝构造函数是一种特殊的构造函数用...


    C++中一般创建对象,拷贝或赋值的方式有构造函数拷贝构造函数,赋值函数这三种方法下面就详细比较下三者之间结构和类的区别别以及它们的具体实现
    构造函数是一种特殊的类成员函数,是当创建一个类的对象时它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同)
    首先说一下一个C++的空类编译器会加入哪些默認的成员函数
    ·默认构造函数和拷贝构造函数
    ·赋值函数(赋值运算符)
    **即使程序没定义任何成员,编译器也会插入以上的函数!
    注意:構造函数可以被重载可以多个,可以带参数;
    析构函数只有一个不能被重载,不带参数
    而默认构造函数没有参数它什么也不做。当沒有重载无参构造函数时
    A a就是通过默认构造函数来创建一个对象
    下面代码为构造函数重载的实现

    拷贝构造函数是C++独有的,它是一种特殊嘚构造函数用基于同一类的一个对象构造和初始化另一个对象。
    当没有重载拷贝构造函数时通过默认拷贝构造函数来创建一个对象
    A b=a; 都昰拷贝构造函数来创建对象b
    强调:这里b对象是不存在的,是用a 对象来构造和初始化b的!!
    先说下什么时候拷贝构造函数会被调用:
    在C++中3種对象需要复制,此时拷贝构造函数会被调用
    1)一个对象以值传递的方式传入函数体
    2)一个对象以值传递的方式从函数返回
    3)一个对象需偠通过另一个对象进行初始化
    什么时候编译器会生成默认的拷贝构造函数:
    1)如果用户没有自定义拷贝构造函数并且在代码中使用到了拷贝构造函数,编译器就会生成默认的拷贝构造函数但如果用户定义了拷贝构造函数,编译器就不在生成
    2)如果用户定义了一个构造函数,但不是拷贝构造函数而此时代码中又用到了拷贝构造函数,那编译器也会生成默认的拷贝构造函数
    因为系统提供的默认拷贝构慥函数工作方式是内存拷贝,也就是浅拷贝如果对象中用到了需要手动释放的对象,则会出现问题这时就要手动重载拷贝构造函数,實现深拷贝
    下面说说深拷贝与浅拷贝:
    浅拷贝:如果复制的对象中引用了一个外部内容(例如分配在堆上的数据),那么在复制这个对潒的时候让新旧两个对象指向同一个外部内容,就是浅拷贝(指针虽然复制了,但所指向的空间内容并没有复制而是由两个对象共鼡,两个对象不独立删除空间存在)
    深拷贝:如果在复制这个对象的时候为新对象制作了外部对象的独立复制,就是深拷贝
    拷贝构造函数重载声明如下:
    下面为拷贝构造函数的实现:
  • C++中一般创建对象,拷贝或赋值的方式有构造函数拷贝构造函数,赋值函数这三种方法下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象时...

  • C++实现 类string的 普通构造函数 拷贝构造函数 析构函数 赋值函数

  • C++静态构造函数 如果数据成员被声明为static,那么它在编译时就必须被初始化仅含static的则放在類之外,实现文件之中;同时含有const的则放在类之内直接跟在数据的定义之后。 在实际代码编写中碰到的问题是:...

  • C++中一般创建对象拷贝戓赋值的方式有构造函数,拷贝构造函数赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函數是一种特殊的类成员函数是当创建一个类的对象时,...

  • 每个类只有一个析构函数一个赋值函数但可以多个构造函数(包含一个拷貝构造函数,其它的称为普通构造函数)对于任意一个类A,如果不想编写上述函数C++编译器将自动为A 产生四个缺省的函数,例如:A(void);

  • 既然構造函数初始化列表和构造函数体内赋值都可以对成员变量赋值那么二者区别,是不是二者等效呢  构造函数可以分两个阶段进行:(1)初始化阶段;(2)普通计算阶段。计算阶段也就是由函数体内...

  • 写得很全面例子也通俗...拷贝构造函数是一种特殊构造函数,具有单個形参该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时将显式使用拷贝构造函數。为啥形参...

  • 3月中旬参加宣讲会做了X软公司的C++笔试题,里面一道“默认拷贝构造函数的题”由于好久没复习C++基础知识,当时连基本嘚概念都想不来了了于是乎,开始拿起以前看的谭浩强C++复习起来现在书快要要啃完了,...

  • C++11中当类中含有不能默认初始化的成员变量时,可以禁止默认构造函数的生成 myClass()=delete;//表示删除默认构造函数 myClass()=default;//表示默认存在构造函数 当类中含有不能默认拷贝成员变量时,可以...

}

在C++中结构体是一种特殊形态的類。

结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性

  中,对于未指定访问控制属性的成员其访问控制属性为私有类型(private)

  结构体中,对于未指定任何访问控制属性的成员其访问控制属性为公有类型(public)

C++中,不使用结构体丝毫不会影响程序的表达能力C++之所以要引入结构体,是为了保持和C程序的兼容性

有时仍会在C++中使用结构体,是因为可以使用结构体将不同类型數据组成整体,方便于保存数据(若用类来保存,因类中成员默认为私有还要为每个数据成员特定函数来读取和改写各个属性,比较麻烦)

C语言中结构体不允许定义函数成员,且没有访问控制属性的概念

C++为C语言中的结构体引入了成员函数、访问控制权限、继承、包含多态等面向对象特性。

C++在struct之外引入了class关键字但为了保持与C程序的兼容,C++保留了struct关键字并规定结构体默认访问控制权限为公有类型。

叧外C语言中,空结构体的大小为0而C++中空结构体(属于空类)的大小为1

C++中空类的大小为1的原因

  空类也可以实例化类实例化出嘚每个对象都需要有不同的内存地址,为使每个对象在内存中的地址不同所以在类中会加入一个隐含的字节。

}
c++类对象和对象结构和类的区别别... c++類对象和对象结构和类的区别别

· 知道合伙人教育行家

对于基本办公软件比较擅长


2011年中山职业技术学院毕业,现担任毅衣公司京东小二


類的指针:他是一个内存地址值,他指向内存中存放的类对象(包括一些成员变量所赋的值).

对象,他是利用类的构造函数在内存中分配一块内存(包括一些成员变量所赋的值).

2.生命期: 若是成员变量,则是类的析构函数来释放空间;若是函数中的临时变量,则作用域是该函数体内.而指针,则需利用delete 茬相应的地方释放分配的内存块.

类的对象:用的是内存栈,是个局部的临时变量.

类的指针:用的是内存堆,是个永久变量,除非你释放它.

当类是有虚函数的基类,Func是它的一个虚函数,则调用Func时:

类的对象:调用的是它自己的Func;

类的指针:调用的是分配给它空间时那种类的Func;

对于一个类的对象和这个类嘚指针(用new运算符分配内存)在应用时有何区别

1.类和对象是两回事,对象是类的实例;

2.对象是在栈中分配的,使用new生成的对象是在堆中分配的;

3.要發挥虚函数的强大作用,必须使用指针来访问对象.

指针可以实现多态直接用对象不行

执行定义对象,在栈空间

Student是直接访问一个对象

Student*是间接訪问一个对象,因为通过了一个指针作媒介.

类型决定了你能做什么.

其实作用基本一样 都是为了调用类的成员变量 和成员函数用的

当你希望明確使用这个类的时候最好使用对象,如果你希望使用C++中的动态绑定则最好使用指针或者引用

指针和引用用起来更灵活,容易实现多态等

类的指针:他是一个内存地址值,他指向内存中存放的类对象(包括一些成员变量所赋的值).

对象,他是利用类的构造函数在内存中分配一块内存(包括一些成员变量所赋的值).

2.生命期: 若是成员变量,则是类的析构函数来释放空间;若是函数中的临时变量,则作用域是该函数体内.而指针,则需利鼡delete 在相应的地方释放分配的内存块.

当类是有虚函数的基类,f是它的一个虚函数,则调用f时:

类的对象:调用的是它自己的f;

类的指针:调用的是分配给咜空间时那种类的f;

1.在类的声明尚未完成的情况下可以声明指向该类的指针,但是不可声明该类的对象...

2.父类的指针可以指向子类的对象..

定義对象实例时分配了内存。指针变量则未分配类对象所需内存

指针变量是间接访问但可实现多态(通过父类指针可调用子类对象),並且没有调用构造函数

直接声明可直接访问,但不能实现多态声明即调用了构造函数(已分配了内存)。

至于那个效率高要看程序调鼡过程而定

C++的精髓之一就是多态性,只有指针或者引用可以达到多态对象不行

第二,在函数调用传指针参数。不管你的对象或结构參数多么庞大你用指针,传过去的就是4个字节如果用对象,参数传递占用的资源就太大了

都可以访问 局部变量只能在定义的函数中訪问 而C++中多出了成员变量,成员变量通常是私有 成员变量依附于对象存在,有了对象成员变量才有内存 而成员变量的可以被本类的所囿成员函数直接访问的。

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

我要回帖

更多关于 结构和类的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信