精华内容
下载资源
问答
  • C++实参是怎么初始化形参
    2019-07-29 14:09:13

    我一直很疑惑,实参初始化形参时,是通过拷贝构造函数还是赋值运算符。
    今天来做一个测试。

    首先创建一个类,实现其构造函数、拷贝构造函数、赋值运算符函数。

    class A
    {
    public:
    	A() {
    		cout << "构造函数" << endl;
    	}
    
    	A(const A &a) {
    		cout << "拷贝构造函数" << endl;
    	}
    
    	A& operator=(const A& a) {
    		cout << "赋值运算符" << endl;
    		return *this;
    	}
    };
    

    一、值传递

    定义一个值传递的函数。

    void fun(A a) {}
    

    调用

    	A a;
    	cout << "call fun" << endl;
    	fun(a);
    

    结果:
    构造函数
    call fun
    拷贝构造函数

    结果出来了,是通过拷贝构造函数。

    二、引用传递

    定义一个引用传递的函数。

    void fun(const A &a) {}
    

    调用

    	A a;
    	cout << "call fun" << endl;
    	fun(a);
    

    结果:
    构造函数
    call fun

    更多相关内容
  • 形参初始化顺序从右向左,析构与构造顺序相反 由于是栈空间所以,先构造后析构,后构造先析构。 测试代码: #include <iostream> using namespace std; class Test { public: Test(int); Test(Test&); ...

    形参初始化顺序从右向左,析构与构造顺序相反

    由于是栈空间所以,先构造后析构,后构造先析构。

    测试代码:

    #include <iostream>
    using namespace std;
    class Test
    {
    public:
    	Test(int);
    	Test(Test&);
    	~Test();
    
    private:
    	int a;
    };
    
    Test::Test(int i)
    {
    	a = i;
    	cout << "constructing  " << a << endl;
    }
    Test::Test(Test& test)
    {
    	a = test.a;
    	cout << "copying   " << a << endl;
    }
    
    Test::~Test()
    {
    	cout << "destructing   " << a << endl;
    }
    
    void outPut(Test test1, Test test2);
    
    int main() {
    	Test* a = new Test(3);
    	Test test1(1);
    	Test test2(2);
    	outPut(test1, test2);
    	system("pause");
    	return 0;
    }
    void outPut(Test test1, Test test2) {
    }
    

    测试结果:

    在这里插入图片描述

    展开全文
  • 以下给出了一个例子,实现了结构体变量的定义,初始化,作为函数形参调用。 代码: #include <stdio.h> struct Day // 定义一个结构体Day { char Data[100]; char Weather[100]; char Mood[100]; }; void ...

    以下给出了一个例子,实现了结构体变量的定义,初始化,作为函数形参调用。
    代码:

    #include <stdio.h>
    struct Day  // 定义一个结构体Day
    {
    	char Data[100];
    	char Weather[100];
    	char Mood[100];
    };
    void printDay(struct Day SpecialDay)  // 在函数中将结构体变量作为参数
    {
    	printf("今天的日期是 %s\n", SpecialDay.Data);
    	printf("今天的天气是 %s\n", SpecialDay.Weather);
    	printf("今天的心情是 %s\n", SpecialDay.Mood);
    }
    int main()
    {
    	struct Day SpecialDay = { "2021年7月28日", "中雨", "平静" };  //结构体变量的定义及初始化
    	printDay(SpecialDay);
    
    }
    

    输出为:

    今天的日期是 2021728日
    今天的天气是 中雨
    今天的心情是 平静
    
    展开全文
  • 今天小编就为大家分享一篇关于C++中map和vector作形参时如何给定默认参数?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 文章目录资源管理类形参初始化顺序传引用和传递值的区别?对象切割问题?当派生类传递给以下函数时发生什么?不要返回为什么运算符重载,返回value,形参是引用?22 成员尽量用private23封装的程度怎么衡量?怎么...

    资源管理类

    在这里插入图片描述

    形参初始化顺序

    在这里插入图片描述

    传引用和传递值的区别?

    效率方面:
    1.传值:对于类,会调用拷贝构造函数。
    2.传引用:不会调用构造函数。
    对于内置类型、stl迭代器、函数对象传值效率更好。

    对象切割问题?当派生类传递给以下函数时发生什么?

    fun(const 基类&w){}//w是派生类
    fun(基类w){}//w是基类,派生类被切割了

    21

    local变量 stack空间 函数退出前销毁
    new创建 heap空间

    不要返回

    1.指针/引用->local stack对象、local static 对象(唯一)
    2.引用->heap分配的对象

    为什么运算符重载,返回value,形参是引用?

    以*为例子
    1) 重载运算符要写operate*(参数1,参数2)
    2) 积 放在哪里呢?
    如果放在堆里
    operate*(const A&  a,const A&  b){
    new c;
    return *c;
    }//可能资源泄露,用户忘记delete
    如果放在栈里,函数结束后就被销毁。
    3)所以返回value,一个副本
    形参是引用是为了效率。
    

    22 成员尽量用private

    原因:

    1. 类代码修改,使用public成员的客户可能受影响
    2. 类代码修改,使用protected的派生类可能受影响

    23封装的程度怎么衡量?怎么方便地扩展工具包?

    衡量标准:访问成员数据的函数数量,数量反比与封装程度。
    解决方法:用非成员函数、非友元函数。
    前提知识:命名空间namespace可以跨过不同文件。
    在这里插入图片描述

    24如果函数的形参都需要类型转换,则定义为non-member

    案例:

    为什么需要类型转换?

    当定义数值类时,比较自然,比如有理数类。

    为什么定义为non-member函数?

    比如定义乘法operate *是成员函数
    2*object;//无法通过编译
    因为2是*this,只有形参会自动转换,this不会。
    解决方法:
    都放到形参里面
    

    在这里插入图片描述

    展开全文
  • C++初始化函数形参

    千次阅读 2014-10-10 23:53:52
    int add(int a,int b) { return a+b; } add(1,2); int add(int a,int b=1,int c=0,char*s=NULL) { printf("a=%d,b=%d,c=%d\n",a,b,c); a=a+b; return a; } int _tmain(int argc, _TCHAR* argv[]) ... // add
  • 使用对象t给copy_t进行初始化,此时初始化过程会第二次调用拷贝构造函数,第二次调用中的形参再一次需要初始化,无限循环,导致内存溢出。 2、初始化与赋值 区别在于需要被赋值或者初始化的对象是否存在,如果...
  • 关于C语言初始化,以及形参实参的一道易错题
  • 我在使用类型参数初始化类时遇到问题.这似乎是Java类型推断的一个缺点,我想知道是否有办法绕过这个或更好的方法实现这一点.public class ParentModel {}public class ChildModel extends ParentModel {}public class...
  • java中的初始化是什么意思

    千次阅读 2021-02-26 17:24:39
    java中的初始化是什么意思发布时间:2020-06-26 15:36:20来源:亿速云阅读:245作者:Leahjava中的初始化是什么意思?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
  • #include &lt;iostream&gt;using namespace std;struct Box{ public: Box(int len,int w,int h):length(len),width(w),height(h){} int volume(); private: int length; int width;...
  • 在一开始学习C语言时,老师就叮嘱过使用变量时,一定要记得初始化,不然会出现奇奇怪怪的值,比如字符串没有初始化,会输出内存中本来的字符,直到遇到 ‘\0’。 同样的类也是一种数据类型,所以我们也需要对对象...
  • 通过文件对结构体初始化的一个简单的示例。该初始化是通过MFC做的。只是用到里面的函数
  • 本文讲述:• 引用 • 引用的初始化 • 引用折叠规则 • 当提到引用时实际表示什么 • 函数的引用是形参 • 函数返回引用
  • 在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造 ... 在方法内部使用self,属性=形参接受外部传递的参数 在创建对象时,使用类名(属性1,属性2...)调用 ...
  • 这一系列文章用于记录技术小白在学习道路上遇到的那些坑,在刚开始接触C系列的...1、声明和初始化指针 指针是一种变量,其值是一个内存地址。 形式如下: Type * pointerVariable; Type * pointerVariable = ad...
  • 函数指针的几种初始化方法

    千次阅读 2018-07-01 09:00:40
    初始化函数指针时,为何既可以在函数名之前加&操作符,又可以不加? 问题2: 函数调用方式有几种,他们之间的区别是什么 ? 问题3: 函数指针的用途有哪些? 1: 函数指针初始化方式有两种: 方式2中的 &操作符是 可...
  • C++中的初始化参数列表

    千次阅读 2018-03-09 14:20:00
    c++中以下几种情况的变量的初始化不可以写在构造函数里,而是要写在初始化参数列表中 1.const常量 class AA { public : const int num; public : AA():num(123)//在初始化列表里初始化const常量 { ...
  • 我们在这篇文章中已经分析函数三种传参的形式,本文中,再通过实例分析函数通过形参返回数值的情况: void* func() { int* num = new int; //空间在main函数中释放,num指针为函数内的局部变量 *num = 100; ...
  • 类参数初始化列表

    千次阅读 2016-12-29 20:19:22
    #include using namespace std ; class B1 { public: B1(int ii=0); void print(){cout;} ~B1(); private: int i; }; B1::B1(int ii):i(ii){}; B1::~B1() { } int main(){ B1 a(1),b(2
  • vector的初始化及常用操作

    千次阅读 2018-08-02 11:20:42
    1.vector的初始化:可以有五种方式,举例说明如下: (1) vector&lt;int&gt; a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。...
  • 好久不写代码,今天动动手就出现了bug:关于数组作为形参的bug,以及二维整型数组初始化的bug。先看看代码吧: void test(int p[]) { int n = sizeof(p) / sizeof(p[0]); int m[n][n]; memset(m, 1, sizeof(p[0...
  • ...main函数中InitStack(&s),之所以去s的地址是因为如果直接用s...在这里用二级指针就相当于把指针的地址传递给了形参,然后在函数中,在s的地址进行操作,在InitStack改变s值,同时在在main函数中会同步
  • 我记得上面这2种情况 c都无法编译,这里我编译过了,如果实参有数据,形参就等于实参,如果实参没有就用形参初始化得值,我得理解是,a.addNum()编译得时候符号表应该是没有参数得,他怎么知道指向函数的,这2个符号...
  • C语言中二维数组初始化和作为形参的设定细节
  • 问题是我在函数外定义了指针,却没有初始化初始化放在函数体内了,指针作为形参,必须要在具体的地方初始化。 double **kdistance = new double*[count]; double *undistance = new double[count]; if
  • 泛型入门使用泛型Java5之后,Java引入了“参数类型”的概念,允许程序在创建集合时指定元素的类型。importjava.util.ArrayList;importjava.util.List;public classa{public static voidmain(String[] args){List ...
  • C#参数详解一(形参和实参)

    千次阅读 2020-09-28 12:47:55
    参数详解参数形参实参值参数 我们知道方法是可以被程序中很多地方调用的命名代码单元,它能把一个值返回给调用代码。返回一个值的确有用,但如果需要返回多个值呢?还有,能在方法开始执行的时候把数据传入方法也会...
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    请注意,在我们进行数组初始化的时候如果定义的数组过长,而我们只初始化了一部分数据,对于未初始化的数据如果是数值型,则会自动赋值为0,对于字符型,会自动赋初值为NULL,即‘\0’ 即不足的元素补以默认值 这里...
  • 初始化列表的作用

    千次阅读 2014-08-23 18:34:58
    冒号这种初始化方法,也叫做,初始化列表,也就是变量初始化的时候调用的 意味着,在一个类当中,一个成员变量只能在初始化赋值。 比如: const, 比如引用&。 举个例子: class A { public: A()

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,460
精华内容 55,384
关键字:

形参初始化