构造函数里的参数y会立刻申请内存吗?main函数里能直接用变量y而不用重新定义吗?为什么?

class Book
{
public:
string bookname;
double price;
int number;
public:
Book(string name,double,int);
void display();
void borrow();
void restore();
};
Book::Book(string name,double x, int y)
{
bookname =name;
price=x;
number=y;
}

0

4个回答

y是参数,参数是在函数执行的时候系统自动放在堆栈上的(这些代码是编译器产生的),不存在申请一说。
如果你在main函数里有x y,而函数的参数也是x y,那么它们虽然名字相同,但是是两回事。main里的x y也在堆栈上,并且复制给作为参数的构造函数里的x y,两者是不同的变量。改变构造函数里的x y也不会影响main里的x y
如果你学过汇编语言,你就会看到,在调用函数的时候有类似下面的伪指令
push x
push y
call 构造函数
主程序会把x y放在堆栈上,然后调用函数

而构造函数里有pop指令将参数拿出来。

0

构造函数在你定义class的对象时自动调用,并为number申请内存,用参数y为number赋值,执行完构造函数y就没了
比如你在mian里写
Book b1("book1",2,3);
这个时候3就传递给y,并赋值给number,然后就没了。
所以你在mian里写y个你构造函数里的y没有一点关系,一定要为其定义

0

一般情况下要用参数(y)必须在main函数里面定义。除非在所有函数外面定义参数(y),这样所有的函数都可以用参数(y)。
在函数里面定义的参数只能在你定义的那个函数使用,不能超出这个范围。

-3

程序执行到构造函数就会申请内存,构造函数执行结束由析构函数进行释放,y作为变量使用时是需要定义的,如果在main函数内没有定义需要在main函数外定义全局变量Y.

-6
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言 结构体指针需要申请内存但函数定义指针不需要申请
在函数定义指针或者变量已经为指针本身和变量本身分配了内存所以用指针指向一个已经定义的变量时不需再分配内存 但是数据结构中用指针指向结构体时只为指针本身分配了内存如果要对结结构体填入内容就要分配一个结构体大小的内存才可以 但只自己分配的内存一定要养成用free()的好习惯
【c++程序】在构造函数中开辟内存空间
/*  *文件名称:pointer.cpp  *作    者:Zhao Tilu  *完成日期:2014年10月8日  *问题描述:在构造函数中开辟内存空间  */ #include using namespace std; class Human { public:  Human(){cout  ~Human(){cout  int get()const{return
结构体在使用之前必须申请空间,即为此分配内存
例如一个结构体SeqList,声明如下: #define ListSize 100 //表空间的大小 typedef int DateType;//数据类型定义需要“;” typedef struct { DateType data[ListSize]; int lengtn; }SeqList;   在声明结构体变量的时候,可以为它分配内存空间,如下: SeqList *
c++构造函数char型指针要重新申请存储空间
5-2 派生类的构造函数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 要求定义一个基类Person,它有3个protected的数据成员:姓名name(char *类型)、性别 sex(char类型)、年龄age(int类型);一个构造函数用于对数据成员初始化;有一个成员函数show()用于
c++类和动态内存分配复习题
1.假设String类有如下私有成员:class String { private: char *str; int len; //... };请说出下面的构造函数有什么问题。 a.String::String(){ }b.String::String(const char * s) { str = s; len = strlen(s); }c.String
malloc与直接声明变量的区别
/** * 以下操作都以声明数组为例 ! * * 一 使用形式的区别 * malloc的使用: * int *a = (int *)malloc(sizeof(int)*N); * 直接声明: * int a[N]; * *二 分配方式的区别 * malloc动态分配----内存是在堆区分配的,分配内存时需要在堆区分配,耗时较大,因为内存管理操作的缘故,分配的内存需要手动析构;
构造函数是否有new的区别
在JavaScript中,任何合法的函数都可以作为对象的构造函数,这既包括系统内置函数,也包括用户自己定义的函数。一旦函数被作为构造函数执行,它内部的this属性将引用函数本身。通常来说,构造函数没有返回值,它们只是初始化由this指针传递进来的对象,并且什么也不返回。如果一个函数有返回值,被返回的对象就成了new表达式的值。从形式上看,一个函数被作为构造函数还是普通函数执行的唯一区别,是否用new
为什么从静态方法里不能调用非静态的方法和变量
静态方法里不能调用非静态变量
main()主函数内外的变量有何区别??(菜鸟级的问题)
main函数是一个进程的入口,初次之外,和别的函数无区别,你说main函数内的
C++中如果声明一个对象指针时,不会调用构造函数
你要理解指针也是一种内置类型。 一个指针在内存中也是有内存空间的。 在现在大多数机器上指针都是32位的,也就是4个字节。 如果你声明指针。例如,假设A是一个类 A *pa; 这内存中会分配4个字节的空间存储一个地址。只不过地址是不可以用的,因为它没有有效的指向某一个有用的内存空间。这和你声明一个int类型是一样的。 int p; 内存中也会分配4个字节空间给p来存储一个整形值,只不过这个整形值不
为什么作为成员变量的类对象,不用初始化也不报错,而作为非成员变量的类对象,不初始化就会报错?
例如: 我在类Test中定义了一个成员变量test3,test3是UserDAO的对象。   其中有个go()方法,里面定义了一个类UserDAO类的对象test2,在访问UserDAO类的findById方法时就会报错。而作为成员变量的UserDAO类的对象test3,在访问UserDAO类的findById方法时就正常。       原因是,类的成员变量在类加载的时候自动初始化,
malloc申请内存时为什么如此占用CPU?
操作系统保护的部分叫做kernel space,然后每一个process不需要调用操作系统的接口就可以完成的操作,就叫做user space,很多工作都不需要系统调用的就叫做user space,很多工作都不需要系统调用,比如做数学运算,呼叫自己写的函数等等,需要操作系统调用的操作都是开销比较大的操作,比如I/O,但是对于一些特别频繁的输入输出,都有特定芯片去处理,不需要消耗CPU的资源,比如键盘...
C语言中定义与声明的本质区别:有无内存分配
变量在定义时被分配内存,并且变量可以指定一个初始化的值。变量只能在这个程序中定义一次。声明在该程序中指定了变量的类型和名称。定义也是一种声明:当我们定义一个变量时,我们声明了它的名字和类型。我们也可以通过使用extern关键字来声明一个变量的名字而不用定义。   一个声明可以是加extern前缀的并包含了目标的类型和名称,如:   点击(此处)折叠或打开   extern int i; //
foreach, 用还是不用,这是一个问题~
接触过C#循环的朋友,想来对foreach应该不会陌生,相比一般的for循环方式,foreach显得更加优雅简洁,Unity支持C#脚本,平日使用中数组列表什么的自然也会遇到不少,想来foreach定然大有用武之地呀!     可惜网上大家的共识却是:不要用foreach!     WTF?     原因其实也简单,就是为了避免GC,因为foreach会“偷偷”申请内存,使用过度的话自
尽量别在for循环里面定义变量
for(int i=0;i ....... } 我们很常做的一件事就是在for循环里定义一个变量并初始化(如上面定义的i,初始化为1),这个变量有可能是为了做循环限制而定义的,而此时变量只做为for循环的局部变量 循环结束后就不能再使用i这个变量。 这是C99规定了一种新的for循环语法,这种语法也是从C++借鉴的,考虑到兼容性不建议使用这种写法。
构造函数与析构函数的顺序及动态内存的申请
//---------main.cpp------------ #include //创建对象需要额外内存 using namespace std; class Person { private: char *pName; public: Person(char *pN = "noName") //构造函数 { std::cout<<"construct
Java中的类,成员变量的值,在声明的时候直接赋值与在构造函数中再赋值,这个是无所谓的,还是有什么规矩?
当然有规矩,在多态情况下,这2种赋值方法尤其需要注意。比如类Demo有个Map类型成员变量,如果直接赋值,那么就必须要指定这个Map是何种Map,而通过构造函数赋值,这个就不确定了,有可能是各种Map的实现。所以,通过构造函数与set方法赋值,能够使程序更加的灵活,也能够体现多态的面向对象的特征。 那么什么情况下直接赋值比较好呢?我建议一些不会变化(比如常量 )或者明确指定实现的依赖,比如记录日
全局对象的构造函数会在main函数之前执行?
#include using namespace std; class CTest { public: CTest() { cout << "构造函数..." << endl; } ~CTest() { cout << "析构函数..." << endl; } }; int main() { CTest t; return 0; } 可见:全局对象的构造函数会
如何在子函数中改变main函数中的变量的值——阿里巴巴一面试题
今天去面试阿里巴巴的平台型产品经理,问了我一个C语言题(产品经理还让现场写程序,我也是醉了!!!),题目大概是  如何在子函数中改变main函数中的变量的值? 比如main函数里定义一个int型变量a,初始值为1,如何在 fun 子函数中将a的值改成100。
立刻执行函数深入了解
转自:http://web.jobbole.com/82520/ 原文是一篇很经典的讲解IIFE的文章,很适合收藏。本文虽然是译文,但是直译的很少,而且添加了不少自己的理解。 ps:下文中提到的“立即执行函数”其实就是“立即执行函数表达式” 1.我们要说的到底是什么? 现在我们定义了一个函数(function foo(){}或者var foo = function(){
js中构造函数创建对象加不加new的问题
本文中将探讨一下,用函数生成对象时候加new 与不加new 的区别。首先看下面一个函数代码块。 function Student(name, age, gender) { this.name = name; this.age = age; this.gender = gender; this.sayHi = function
为什么main函数中的变量必须初始化
public static void main(String[] args) {         // TODO Auto-generated method stub         new T1();         int t ;         System.out.println(t);//报错?!     }
C++构造函数初始化列表中不能使用this指针
先看个例子: class Point {//这个class用来表述“点” public: Point(int x, int y) : this->x(x), this->y(y) { } void setX(int x) { this->x = x; } void setY(int y) { this->y = y; } public: int x; int y; }
使用new为结构分配内存而不是声明一个结构变量
// practice4-8.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include const int len = 70; struct pizza { char brand[len]; double diameter; double weight; }; int _tmain(int argc, _TCHAR* argv[]) {
C++成员变量的new操作应该放在构造函数中吗?
C++类中的指针成员变量(生命期紧随该类)的new操作,应该在类的构造函数中?还是需要一个Init()函数,也就是在构造函数外?为了解决这个问题,写个例子测试下。。 首先定义三个类,没有什么重要意义 class A{ public: A(){ std::cout << "A()" <<std::endl; } ~A(){ std::cout << "~A()" <<std:
机器学习---之损失函数求最小值为什么不用导数为0的点而用梯度下降法
1.因为,损失函数可能有无限个极值点,你并不知道哪个点可以使损失函数最小,如下图中的损失函数: 2.而使用梯度下降法虽然不一定能求导全局最小值,但可以求导局部最小值,也能使损失函数降低为0,如下图所示: 3.如果损失函数是凹的或者是凸的时候,一定可以找到全局最优解,这个时候,在训练过程中你可以看到损失函数可能早都为0了,但还是在不断迭代找全局最优解,这个过程可能是无限的,因
类或者结构体用无参构造函数创建对象时不需要带括号, 否则会当成函数声明
实例1: 类 #include &lt;iostream&gt; using namespace std; class Test { public: Test() { } Test(int) { } void fun() { } }; int main(void) { Test a(10); // 语句1 a....
C语言malloc申请内存不释放的后果
C语言,用malloc动态申请内存,不free,电脑会死机吗 代码 #define _CRT_SECURE_NO_WARNINGS #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;string.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; void malloc_no_free() { char *p; p=(char*)malloc(10000000)...
C++的类中,声明一个对象好还是用指针申请一块空间好?
在c++的类中,我如果要访问类中的成员变量或函数,有2种方法,第一种就是定义一个一个对象,如: Class A ... A aa; aa.xxx(); 另外一种就是 Class B ... B *aa = new B(); aa->xxx(); 这两种方法在使用上不知有没有什么区别,或是什么情况下用指针对象,什么情况下用普通对象?收起 用指针对象,用完之后需要释放内存空间
关于函数return 问题 详细解释~
JavaScript 函数 return JavaScript 函数的 return 语句用来规定从函数返回的值。当一个函数运行后,要得到一个运行结果,就需要使用 return 语句来返回该结果。 下面的例子返回两个参数值之和: function sum(x,y){ return x+y; } result = sum(2,3); document.write( resu
c++中static变量在main函数之前执行
c/c++语言中,在执行main的入口函数之前,是会首先执行一段代码。 而对于全局变量和static的初始化就是 在main函数之前执行的,例子如下: [cpp] view plain copy   #include       #include        class static_name      {      pub
深入java (类)构造函数和对象创建的内存分配
之前的文章总结了java一些较为常用的关键字,现在我们要进入到类里面,总结类的特征(其中包括了内存和构造函数,gc垃圾回收),java中类的继承和初始化顺序(会涉及到ClassLoader),java多态的深入,java抽象类、接口的深入理解和例子。今天从类开始。原创不易,转载请注明出处:http://blog.csdn.net/yabay2208 从计算机原理角度初探java类对象使用的堆和栈 j
类的定义和声明必须放在main函数前
类的定义和声明必须放在main函数前
使用vector容器存储动态申请内存变量的注意事项
初次接触vector的同学可能会因为方便而放弃使用new/delete、malloc/free等动态内存申请方式,当需要用到一个不确定空间大小的变量时,可以直接定义 vector vecINum; vector> vecCName; vector vecMC; 然后通过push_back/pop_back等操作动态增加数据。 然而使用过程中如果涉及到动态内存申请,就需要注意以下的情况: #
为什么倾向于使用Enum类,而不是static 变量
可能你有这样的疑惑: [code=&quot;java&quot;]public class PartyNeeds { public static final int PLATES = 1; public static final int CUPS = 2; } public enum EPartyNeeds { PLATES,CUPS; }[/co...
为什么不使用线性回归而是逻辑回归解决二分类预测问题
1.逻辑回归解决的问题 毫无疑问是分类问题,可以有多分类和二分类。 2.为什么不使用线性回归?(逻辑回归与线性回归的异同?) 一句话,是因为当因变量为概率时,用不了线性回归。 为啥? 线性回归需要两个假设条件,即: 高斯马尔科夫条件 {cov(ϵi,ϵj)=0if&amp;nbsp;i≠jD(ϵi)=σ2任意iE(ϵi)=0\begin{cases} cov(\epsilon_i,\epsilon_j)...
C/C++语言变量声明内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。 2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局
构造函数中慎用memset
写了一个小程序,工作时会跑一个大循环,在运行时发现有严重的内存泄露,内存不停增长。 经过几次复查,终于找出问题所在,代码结构大概如下: struct myobj { myobj() {  memset(this,0,sizeof(myobj)); }   int n; //...其他成员 string s; } 定义了一个结构体,有众多类型成员,想初始化成员但又懒得一一赋值
构造函数使用默认参数后不能使用构造函数重载
#include class Date { public: Date(int,int,int); Date(int,int); Date(int); Date(); void display(); private: int month; int day; int year; }; Date::Date(int m,int d,int y):month(
Python类中__init__函数和self参数的关系
一.类的定义和初始化 在Python中,可以通过class关键字定义自己的类,然后通过自定义的类对象类创建实例对象。最简单的类如下:>>> class FirstClass: >>> pass类的实例化如下:>>> a = FirstClass() >>> b = FirstClass()>>> print(a) <__main__.FirstClass object at 0x0
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 机器学习需要会大数据吗 学习大数据会失业吗

相似问题

4
构造函数里的参数y会立刻申请内存吗?main函数里能直接用变量y而不用重新定义吗?为什么?
1
为什么输出结果为$23????
3
为什么那么多语言采用switch case?
1
C++用sizeof取二维数组长度问题
4
新人求教 cpp中for循环中定义的变量怎么在循环外部引用
0
Qt绘图怎么不在自己创建的绘图类里取得painter绘图
0
按要求输入后没有输出,然后显示Process exited...return value 3221225477,请问是为什么?
1
pat乙级真题1013 找素数,自己测不出来问题,但答案全错,大神能进来看看吗?
1
各位大神帮帮忙,这段代码中为什么求总分、平均分和排序会出现错误的(非常紧急)
0
Qt调用MATLAB程序就会发生错误自动退出界面,会去找pdb文件,要怎么解决,求各位大神解答,拜托拜托!!!
1
请问我使用SetBitmapBits把图像BYTE数据显示到面板为什么不对啊
0
用opencv的程序,在开发板上imwrite段错误,imread结果为空
0
MATLAB 为什么相同的算法,一个能出值一个会报错
2
memset、memcpy这类函数属于C风格吗?
2
C++可以给自己的程序生成个.conf的配置文件吗?
0
要做个云存储类型的网盘在网上找到了seafile,并且在seafile上下载了源码能直接引用在自己项目中吗?
2
我想知道怎么在c++中变换数据类型(把字符型数据对应的ASCII码作为变量重新定义数据类型后的值)
2
为什么在void函数中用 if 分支时不能跳转到else
1
C++ 用函数输入值,怎么把值输出来
1
关于ffmpeg在推流中动态修改 输入流参数的问题