声明函数时候,形参为什么有时候用指针对象,有时候使用普通类对象?

问题描述

声明函数时候,形参为什么有时候用指针对象,有时候使用普通类对象?为什么不能像java都使用普通类对象?难道类对象作用不能实现到指针对象功能?比如代码如下: class A{}class B( public: B(A* aaa);//这里为什么不用A aaa去掉指针 //普通类传参有什么区别 B(A aaa);}

解决方案

引用class B( public: B(A* aaa);//这里为什么不用A aaa去掉指针 //普通类传参有什么区别 B(A aaa); } 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类中的fA *a= new AA();a->f();//它执行的是AA类中的f

时间: 2024-08-29 07:10:08

声明函数时候,形参为什么有时候用指针对象,有时候使用普通类对象?的相关文章

声明函数指针并实现回调

程序员常常需要实现回调.本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调.注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论). 声明函数指针 回调函数是一个程序员不能显式调用的函数:通过将回调函数的地址传给调用者从而实现调用.要实现回调,必须首先定义函数指针.尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指针的声明与函数声明非常类似.请看下面的例子: void f():// 函数原型 上面的语句声明了一个函数

c语言-C语言函数的形参(结构体类型)和实参类型(指针)可以不同吗?

问题描述 C语言函数的形参(结构体类型)和实参类型(指针)可以不同吗? int numstus; int lens; student pointer; void main() { int i=1; char str[2]; lens=100; pointer=(student *)malloc(lens*LEN); /分配内存*/ numstus=0; welcome(); /*欢迎界面*/ while(i>0) { i=menu_select(); /*控制菜单*/ switch(i) { c

编程c语言-c语言三维数组做函数输入变量,函数的形参怎么写?

问题描述 c语言三维数组做函数输入变量,函数的形参怎么写? 比如uint8_t cube[5][5][5];要在函数内处理数组内的数据并能返回值,肯定是传入三维数组的地址.函数定义时形参不知道怎么写才行??void process(uint8_t ????); 解决方案 用uint8_t * cube就可以了. 解决方案二: 需要用指针不然改的都是形参的临时内容,或者直接操作全局变量 解决方案三: 其实传入一个地址指针就可以实现数据同步了.*(&cube) 解决方案四: C语言:变量和函数引用的

java-关于Java如何给main主函数的形参赋值

问题描述 关于Java如何给main主函数的形参赋值 程序如下,我想给main函数的String args[]形参赋值,在cmd的黑框下,我可以执行时候 直接赋值,但在Eclipse里面,请问我要怎么做到这种效果. public class ARG{ public static void main(String args[]){ for(int x=0;x<args.length;x++){ System.out.println(args[x] + ".") ; } } }; 解

编程习惯:你会把函数的形参赋值给函数内临时变量吗?

问题描述 编程习惯:你会把函数的形参赋值给函数内临时变量吗? 阅读代码时,常会发现有人把函数的形参赋值给函数内临时变量,然后对这个临时变量操作,如下面的例子: int func(int i) { int temp=i; printf("%dn", temp++); return temp; } 和直接操作形参有什么区别呢?(如下) int func(int i) { printf("%dn", i++); return i; } 请大神指点--

编程-为什么派生类的指针指向基类对象 还可以调用派生类的函数?

问题描述 为什么派生类的指针指向基类对象 还可以调用派生类的函数? 想不明白啊,高手帮帮忙吧 Derived1 * hh = static_cast(new Base); hh->derivedfunction(); // 这里竟然是可以的 为什么呢 hh指向的是一个基类对象啊?? 而且即使derivedfunction里面用到派生类的私有成员也是可以的, 这到底是为什么啊??? 解决方案 虽然语法上让你通过了,static_cast是强制类型转换,所以语法没办法阻止你错误的做法,但是实际运行结

编译出错-用push_back函数将数存入结构体指针向量中编译不出错,运行的时候出不来!

问题描述 用push_back函数将数存入结构体指针向量中编译不出错,运行的时候出不来! #include #include #include using namespace std; typedef struct person { string name; vector length; }person,*person_List; int main() { int number; person_List p; person p1; p = (person_List)malloc(sizeof(p

如果C函数传递,或者返回字符串指针,C#如何调用?

问题描述 如果C函数传递,或者返回字符串指针,C#如何调用?假设C函数:extern"C"DLL_EXTERNCHAR*__stdcallget_str(void);extern"C"DLL_EXTERNvoid__stdcallset_str(CHAR*);extern"C"DLL_EXTERNCHAR*__stdcallget_set_str(CHAR*);C#如何调用? 解决方案 解决方案二:char*一般用string类型代替,参数的话,

javascript中声明函数的方法及调用函数的返回值_基础知识

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <!--js中声明函数的方法--> <script type="text/javascript"> //因为javascript是弱类型的语言,所以参数不需要加类型.函数的也不需要像c#那样要求所以路径都需要有返回值(这个不像c#语言,而且c#的方法也不需要在方法