声明函数时候,形参为什么有时候用指针对象,有时候使用普通类对象?为什么不能像java都使用普通类对象?难道类对象作用不能实现到指针对象功能?比如代码如下:
class A
{
}
class B(
public:
B(A* aaa);//这里为什么不用A aaa去掉指针
//普通类传参有什么区别
B(A aaa);
}
声明函数时候,形参为什么有时候用指针对象,有时候使用普通类对象?为什么不能像java都使用普通类对象?难道类对象作用不能实现到指针对象功能?比如代码如下:
class A
{
}
class B(
public:
B(A* aaa);//这里为什么不用A aaa去掉指针
//普通类传参有什么区别
B(A aaa);
}
[quote]class B(
public:
B(A* aaa);//这里为什么不用A aaa去掉指针
//普通类传参有什么区别
B(A aaa);
} [/quote]
1、传指针(和引用)是非常快的,f(A aaa);这种形式 在传参数的时候,会首先调用类A的赋值构造函数。而f(A* aaa);则只需要传递一个4字节的地址即可。
2、f(A* aaa); 在它的函数体内改变aaa指向的对象,则源对象被改变。f(A aaa);在函数体内改变aaa对象,源对象不被改变,亦即实参不被改变,被改变的只是副本。
3、c++的多态特性只能建立在指针和引用的基础之上,不能想Java那样直接建立在对象基础之上。
例如:
前提:AA 是 A的派生类,f为A中的虚函数
A a= AA(aa);
a.f();//它执行的是A类中的f
A *a= new AA();
a->f();//它执行的是AA类中的f