`
guoyiqi
  • 浏览: 1002017 次
社区版块
存档分类
最新评论

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

 
阅读更多

在C++里,有两种方法创建对象:

方法一

ClassName object(param);

这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。

注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。

例如,我定义了一个这样的类:

class Rec
{
public:
Rec(int width,int height);
~Rec();
int getArea();

private:
int Rwidth;
int Rheight;
};

当你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);

rec->getArea();

delete rec;

顺便提一下:

一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量。在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。

分享到:
评论

相关推荐

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

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

    C++面向对象实验代码实验2

    C++实现多态主要有两种方式:虚函数(virtual functions)和纯虚函数(pure virtual functions)。在`test2`中,可能会看到通过虚函数实现的动态绑定或多态行为。 6. 接口(Interface):虽然C++不直接支持接口概念...

    C++面向对象程序设计 经典例题 附练习题

    1. **类**:类是创建对象的模板或蓝图,它定义了对象的状态(数据成员)和行为(成员函数)。例如,你可以创建一个名为“Student”的类,包含姓名、年龄等属性和学习、参加活动等方法。 2. **对象**:对象是类的...

    深度探索c++对象模型(2012版本)

    C++提供了堆和栈两种内存分配方式。栈内存由编译器自动管理,用于存储局部变量和函数调用信息;而堆内存则需要程序员手动管理,通过new和delete操作进行分配和释放。不正确的内存管理可能导致内存泄漏或悬挂指针,这...

    C++面向对象程序设计PDF电子书与参考答案

    在C++中,有两种形式的多态性:静态多态(编译时多态)通过函数重载和运算符重载实现,动态多态(运行时多态)通过虚函数和纯虚函数实现。 7. **抽象类与接口**:抽象类包含至少一个纯虚函数,不能被实例化,但可以...

    C++面向对象的2种方法的例子

    本篇文章将深入探讨两种不同的面向对象方法:使用数组和模板,并通过实际的代码示例来帮助理解。 首先,我们来看看如何在C++中使用面向对象的方式来处理数组。数组在C++中是一种基本的数据结构,用于存储同类型的...

    c++面向对象考试题即答案

    模板和继承是 C++ 中的两种不同的机制,模板用于生成通用代码,而继承用于实现对象之间的继承关系。 在填空题部分,涵盖了以下知识点: 13. 函数原型(填空题 13)。 函数原型是 C++ 中的一种机制,它用于声明...

    C++面向对象程序设计教程——课件PPT

    C++是一种强大的编程语言,以其面向对象特性而闻名,它结合了过程化编程和面向对象编程的优势。在“C++面向对象程序设计教程——课件PPT”中,我们可以深入学习这一主题,由陈维兴和林小茶编著,清华大学出版社出版...

    C++面向对象程序设计上机考试题库.pdf

    在第一个Box类的实现中,使用了默认参数,允许在创建对象时不对长宽高进行初始化,而是使用默认值。 2. 在第二个Box类的实现中,重载了构造函数,允许用户在创建对象时传递三个参数,分别是长、宽和高,并在构造...

    深度探索C++对象模型 PDF中文清晰版

    3. **内存管理**:C++提供了两种主要的内存区域——栈和堆。栈内存由编译器自动管理,而堆内存需要程序员手动分配和释放。不当的内存管理可能导致内存泄漏或悬挂指针。 4. **继承与多态**:继承允许一个类(子类)...

    C++面向对象高效编程

    6. 构造函数与析构函数:构造函数是在创建对象时自动调用的特殊函数,用于初始化对象的状态。析构函数则在对象生命周期结束时自动调用,用于清理对象占用的资源。这两种函数对于管理对象的生命周期至关重要。 7. ...

    深入探索c++对象模型 设计模式c++ pdf

    例如,工厂模式提供了一种抽象创建对象的方式,使得具体的对象创建细节得以隐藏,增强了代码的可扩展性;单例模式确保一个类只有一个实例,常用于控制共享资源的访问;观察者模式则定义了对象间的一对多依赖关系,当...

    C++面向对象编程的一些总结

    C++提供了两种形式的多态:静态多态(编译时多态)和动态多态(运行时多态)。静态多态主要通过函数重载和运算符重载实现;动态多态则依赖于虚函数和纯虚函数,通过基类指针或引用调用派生类的成员函数,实现运行时...

    c++面向对象实验答案

    在C++编程语言中,面向对象编程(Object-Oriented Programming, OOP)是一种核心的编程范式,它强调通过对象来组织代码,使得程序设计更加模块化、可读性和可维护性更强。本"面向对象实验答案"涵盖了一系列C++实验,...

    C++面向对象课程设计报告

    这两种函数有助于确保对象的正确创建和销毁。 6. **运算符重载**:C++允许对已有的运算符进行重载,以便为自定义类型赋予自然且直观的操作。例如,我们可以让自定义的类支持算术运算,如加法、减法等。 7. **模板*...

    c++ 面向对象多线程编程

    在C++编程中,面向对象和多线程是两个重要的概念,它们对于开发高效、并发的软件至关重要。本文将深入探讨这两个主题,并结合C++语言特性进行详细解释。 首先,让我们了解一下面向对象编程(Object-Oriented ...

    (C++)深度探索C++对象模型_C++_

    1. **对象与类**:在C++中,类是创建对象的蓝图,它定义了一组数据成员(变量)和成员函数(方法)。对象是类的实例,具有类所定义的属性和行为。创建对象时,内存会分配给对象的数据成员,并可以调用成员函数来操作...

    C++面向对象程序设计答案

    在C++中,有两种形式的多态性:静态多态(函数重载和运算符重载)和动态多态(虚函数和纯虚函数)。虚函数使得指针或引用可以指向基类对象,调用派生类的成员函数,实现动态绑定。 5. **构造函数与析构函数**:构造...

    c++面向对象的程序设计课件杜茂康版

    在C++中,多态有两种形式:静态多态(通过函数重载和运算符重载实现)和动态多态(通过虚函数和纯虚函数实现)。虚函数使得基类指针或引能调用到派生类的相应函数,实现了运行时多态。 此外,C++还支持模板,可以...

Global site tag (gtag.js) - Google Analytics