`
jubincn
  • 浏览: 234657 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

C++创建对象的两种方法

 
阅读更多
转自:http://blog.sina.com.cn/s/blog_586b6c050100dhjg.html
在C++里,有两种方法创建对象:
方法一:
ClassName object(param);
这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。
注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。
例如,我定义了一个这样的类:
class Rec
{
<wbr><wbr>public:
</wbr></wbr><wbr><wbr>Rec(int width,int height);
</wbr></wbr><wbr><wbr>~Rec();
</wbr></wbr><wbr><wbr>int getArea();
</wbr></wbr><wbr><wbr>private:
</wbr></wbr><wbr><wbr>int Rwidth;
</wbr></wbr><wbr><wbr>int Rheight;
</wbr></wbr>};
当你Rec myRec(5,5);这样创建一个myRec对象,然后打印出sizeof(myRec);的时候,会得到 8 这个结果。
因为myRec中有2个int类型的数据成员,一个int成员占4个字节,所以myRec对象占8个字节。
这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数
注意:该方法创建的对象调用类方法时,必须用“.”,而不能用“->”.如myRec.getArea();
=============================================================================================
方法二:
ClassName *object=new ClassName(param);
delete object;
这种方法跟java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。而且,用new 动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。
注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;
例如:Rec *rec=new Rec(3,4);
<wbr><wbr><wbr><wbr><wbr><wbr>rec-&gt;getArea();
</wbr></wbr></wbr></wbr></wbr></wbr><wbr><wbr><wbr><wbr><wbr><wbr>delete rec;
</wbr></wbr></wbr></wbr></wbr></wbr>顺便提一下:
一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量。在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。
分享到:
评论

相关推荐

    Java创建对象与C++创建对象的比较

     1、C++创建对象方式  在C++中我们可以采用如下两种方式来创建对象, 1 Dog dog;//Dog为类名 2 Dog *p = new Dog();  这两种方式在C++中都能完成对象的创建,但是在内存中的处理却完全不同。  对于...

    C++和QML交互

    Qt 提供了两种在 QML 环境中使用 C++ 对象的方式: 1. 在 C++ 中实现一个类,注册到 QML 环境中, QML 环境中使用该类型创建对象 2. 在 C++ 中构造一个对象,将这个对象设置为 QML 的上下文属性,在 QML 环境中直接...

    C++面向对象编程小例子

    用户可以任选石头、剪子、布中的一种,计算机也随机产生3种物件之一,根据“石头赢剪子,剪子赢布,布赢石头”的规则判定胜负,另外,默认为一局定胜负,如果有可能,实现三局两胜的规则。 3. 生成一个Rectangle类...

    如何把C++对象绑定到Lua轻量级

    从程序员的角度上来看,把一个脚本语言嵌入到游戏中最主要的问题是如果为脚本语言提供对宿主对象的访问(通常是C/C++对象)。在选择一个脚本语言的时候有两个关键的特性:嵌入相关问题和绑定相关问题。而这些是Lua...

    (完整版)c++面向对象程序设计试题和答案.doc

    面向对象程序设计是一种程序设计方法,它将问题域中的对象或实体抽象为类,并通过类的继承、多态性和封装等机制来实现程序的模块化和重用。在C++中,面向对象程序设计是通过类的定义和成员函数来实现的。 类的定义...

    C++类和对象.ppt

    类和对象的简单应用包括创建对象、访问对象的成员变量和成员函数、实现对象的行为等。 总结 C++类和对象是面向对象编程的基础概念,类是对对象的抽象描述,对象是现实世界中某个具体的物理实体在计算机逻辑中的...

    C++程序设计与实践:07-第6章 深入类和对象.ppt

    深复制和浅复制是指复制类对象时的两种方式。深复制是将整个对象完全复制,包括所有成员变量,而浅复制只复制对象的引用,不复制对象的内容。在C++中,可以使用复制构造函数来实现深复制和浅复制。 2. 禁止复制 ...

    现代C++程序设计

    5.5.1 复习:两种机制 5.5.2 为什么要强调指针的重要性 5.6 queue类 5.7 总结 5.8 练习 复习题 第6章 数组 6.1 使用单个数据变量 6.2 数组基础 6.2.1 数组的索引值从0开始 6.2.2 使用for循环和数组来实现的电话账单...

    《C++面向对象程序设计》(谭浩强版)答案

    C++是一种基于C语言的面向对象编程语言,它引入了许多新的语言特性和编程概念,例如类、对象、继承、多态性等。 2.1 C++对C的扩充简介 C++对C的扩充主要体现在以下几个方面: * 类和对象:C++引入了类和对象的...

    C++面向对象程序的设计第六章课后习题答案(第2版—谭浩强).docx

    本资源涉及C++面向对象程序设计的多个知识点,包括类的定义、继承、多态、虚函数、析构函数、抽象基类、对象的创建和销毁等。 1. 类的定义和继承 在第一个习题中,我们可以看到两个类的定义:Point类和Circle类。...

    清华大学 C++教程

    【重点和难点】  本章的重点在于两种程序设计方法的理解,以及Visual C++ IDE的使用。  其中面向对象程序设计的基本思想、基本概念及主要特征也是本章学习的难点。 【学习方法】  本章概念和...

    C++学习笔记:关于C++类与动态内存分配中布局new操作符

    但是,在某些情况下,我们需要使用布局new操作符来分配内存,例如在现有的内存块上创建对象。在本文中,我们将详细介绍C++类与动态内存分配中布局new操作符的使用和释放。 一、new操作符和布局new操作符的区别 在...

    C++可调用对象详解

     C++11有两种办法传递可变形参(其实学了模板以后可以用模板的自动递归来展开所传递的参数,这个后面再说)。  1. 第一种是initializer_list,这是一个标准库类型(其实是个模板)。  std::initializer_l

    C++第一章 概述.ppt

    C++ 第一章 概述 C++ 语言是一种高级程序设计语言,它的发展历史可以追溯到 1960 年代。...C++ 语言是一种功能强大且灵活的程序设计语言,它支持面向对象程序设计方法,并且具有良好的可读性和可维护性。

    计算机C++基础题库

    * 多态是C++的一种机制,允许对象在不同的情况下表现出不同的行为。 6. 异常处理 * 异常处理是C++的一种机制,允许程序在出现错误时采取相应的措施。 * 异常处理可以通过try-catch语句来实现。 7. 文件输入输出 ...

    C++ 23种设计模式的实现

    * 迭代子模式:提供一种方法顺序访问一个聚合对象中的各个元素。例如,迭代子模式可以用于实现一个数据库的查询结果集。 * 访问者模式:使得一个对象可以接受并执行一些操作,而不需要改变该对象的类。例如,访问者...

    C++ 语言入门.pdf

    C++ 语言是由 Bjarne Stroustrup 博士在 1980 年开始创建的,具有面向对象的程序设计特色。C++ 是 C 语言的超集,包含了所有的 C language elements,并增加了一些新的特点,如类、继承和多重继承、运算符重载、类...

    新手学习C++入门资料

    布尔型变量是有两种逻辑状态的变量,它包含两个值:真和假。如果在表达式中使用了布尔型变量,那么将根据变量值的真假而赋予整型值1或0。要把一个整型变量转换成布尔型变量,如果整型值为0,则其布尔型值为假;反之...

    C++实现多线程文件复制.docx

    在给定的代码中,使用了两种方法实现多线程文件复制: 1. 使用CFile类复制文件 在第一个代码块中,使用CFile类复制文件。CFile类提供了Read和Write方法,用于读取和写入文件。通过使用多个线程,每个线程负责复制...

Global site tag (gtag.js) - Google Analytics