大家好,问个基础有关问题

大家好,问个基础问题!
小弟以前做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对象直接创建在栈上吗?
还有-> 操作符,和.操作符的具体区别是什么?该怎样理解?

------解决方案--------------------
例2直接在栈上创建
指针用->
一般实例用.
------解决方案--------------------
指针也可以用.
------解决方案--------------------
直接成员访问使用点操作符:变量名boy1成员名boy1.getsex()
间接成员访问使用箭头操作符:如boy *px = &boy2,px-> getsex()
------解决方案--------------------
对java不熟悉,但例子2再C++来说是很正常的,在声明对象的同时就为它创建了一个实例。
但如果声明一个指针的话,仅仅是为指针创建了一个实例,并没有为指针所指的对象创建实例
因此还需要创建一个对象实例,再用指针指向它,就像例子1当中的一样。

------解决方案--------------------
使用对象实例访问成员函数或变量用“.”号
使用指针访问用-> 符
------解决方案--------------------
在栈上分配。
对象引用成员函数用.
指针用p-> ,-> 就相当于(*p).
------解决方案--------------------
由于java中抛弃了指针,因此对于指针的概念建议楼主再认真补习一下。同时,学c++是不要与java去比较,否则会学的很痛苦。
------解决方案--------------------
例1:
ClassA* a;
a = new ClassA();
a-> fun();

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

例子2:
ClassA a;
a.fun();
// 把对象分配在栈上,就像分配内建数据类型的一样,如int a;
------解决方案--------------------
Java中对象是分配在堆上的,基本类型分配在栈上。

C++中对象和基本类型都可以在栈上或者堆上。在堆上时往往以指针形式操作。

------解决方案--------------------
C++ 中的 ClassA a; 一个语句就是定义一个 ClassA 的实例对象a,a在栈上,是一个对象,故调用方法使用 .成员 的方式。

ClassA* a;
a = new ClassA(); //其实这种方式更类似java中的行为方式
它只定义一个指针,
然后才重新 new 在堆上获得对象实例,
由于是指针,故使用 -> 成员 的方式访问其方法。
------解决方案--------------------
成员函数或变量用“.”号
使用指针访问用-> 符

------解决方案--------------------
". " : 成员访问操作符
"-> " : 通过指针访问成员


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

如果是对象,则用 .

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

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

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

对象a在栈上