大家好,问个基础问题!

SimerJoe 2007-08-05 12:57:56
小弟以前做java比较多,现在要用C++了,请大家多多关照.

在java或者c#里面,我们要使用某个对象的方法,一般如下:
ClassA a; //定义一个对象(在栈内声明一个引用)
a = new ClassA(); //实例化这个对象(在堆上生成对象的实体)
a.fun(); //调用对象的方法(调用堆上的某个方法)

但是在C++里面却可以这样搞:
例1:
ClassA* a;
a = new ClassA();
a->fun();

例子2:
ClassA a;
a.fun();

例子1还好理解,定义一个指针,然后动态分配一块内存,然后调用.
但是例子2是什么原理?a对象直接创建在栈上吗?
还有->操作符,和.操作符的具体区别是什么?该怎样理解?
...全文
306 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2007-08-05
  • 打赏
  • 举报
回复
"." : 成员访问操作符
"->" : 通过指针访问成员


如果是指针,要访问成员(成员变量,成员函数)用 ->

如果是对象,则用 .

例1:
ClassA* a;
a = new ClassA();
a->fun();

指针a在栈上,a指向的对象在堆上

例子2:
ClassA a;
a.fun();

对象a在栈上
MPTD_Fire 2007-08-05
  • 打赏
  • 举报
回复
成员函数或变量用“.”号
使用指针访问用->符
jixingzhong 2007-08-05
  • 打赏
  • 举报
回复
还有->操作符,和.操作符的具体区别是什么?该怎样理解?
==========================
对象.成员方法();
指针->成员方法();

或者将指针 *操作获得其指向的对象:
(*指针).成员方法()
jixingzhong 2007-08-05
  • 打赏
  • 举报
回复
C++ 中的 ClassA a; 一个语句就是定义一个 ClassA 的实例对象a,a在栈上,是一个对象,故调用方法使用 .成员 的方式。

ClassA* a;
a = new ClassA(); //其实这种方式更类似java中的行为方式
它只定义一个指针,
然后才重新 new 在堆上获得对象实例,
由于是指针,故使用 ->成员 的方式访问其方法。
iambic 2007-08-05
  • 打赏
  • 举报
回复
Java中对象是分配在堆上的,基本类型分配在栈上。

C++中对象和基本类型都可以在栈上或者堆上。在堆上时往往以指针形式操作。
Inhibitory 2007-08-05
  • 打赏
  • 举报
回复
例1:
ClassA* a;
a = new ClassA();
a->fun();

// 在堆上分配对象,Java中的所有对象都是分配在堆上的,而c++中只有用new操作分配的对象才是分配在堆上的,因为c++中还可以把对象分配在栈上。
// "->" 这个操作符是指针操作其中的成员的固定格式,只不过是一种规定,指针访问它所指向的对象的成员时的操作符,死记住就行了。

例子2:
ClassA a;
a.fun();
// 把对象分配在栈上,就像分配内建数据类型的一样,如int a;
tangshuiling 2007-08-05
  • 打赏
  • 举报
回复
由于java中抛弃了指针,因此对于指针的概念建议楼主再认真补习一下。同时,学c++是不要与java去比较,否则会学的很痛苦。
uzone 2007-08-05
  • 打赏
  • 举报
回复
在栈上分配。
对象引用成员函数用.
指针用p->,->就相当于(*p).
czlyc006 2007-08-05
  • 打赏
  • 举报
回复
使用对象实例访问成员函数或变量用“.”号
使用指针访问用->符
cnssccgg 2007-08-05
  • 打赏
  • 举报
回复
对java不熟悉,但例子2再C++来说是很正常的,在声明对象的同时就为它创建了一个实例。
但如果声明一个指针的话,仅仅是为指针创建了一个实例,并没有为指针所指的对象创建实例
因此还需要创建一个对象实例,再用指针指向它,就像例子1当中的一样。
yydrewdrew 2007-08-05
  • 打赏
  • 举报
回复
直接成员访问使用点操作符:变量名boy1成员名boy1.getsex()
间接成员访问使用箭头操作符:如boy *px = &boy2,px->getsex()
plo2168424 2007-08-05
  • 打赏
  • 举报
回复
指针也可以用.
yydrewdrew 2007-08-05
  • 打赏
  • 举报
回复
例2直接在栈上创建
指针用->
一般实例用.

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧