亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

如果main函數用堆實例化一個對象,傳參的時候為什么也要加上一個“*”?

#include <iostream>

using namespace std;


/**

?* 定義Coordinate類

?* 友元函數:display

?* 數據成員:m_iX、m_iY

?*/

class Coordinate

{

? ? // 友元函數

? ? friend void display(Coordinate &coordinate);

public:

Coordinate(int x, int y)

{

m_iX = x;

m_iY = y;

}

public:

int m_iX;

int m_iY;

};


/**

?* display函數用于顯示m_iX、m_iY的值

?*/

void display(Coordinate &coordinate)

{

cout << "m_iX:" << coordinate.m_iX << endl;

cout << "m_iY:" << coordinate.m_iY << endl;

}


int main(void)

{

? ? // 實例化Coordinate對象

? ? Coordinate *coordinate = new Coordinate(1,2);

? ? // 調用display函數

? ? display(*coordinate);

? ? delete coordinate;

? ? coordinate = NULL;

return 0;

}

就比如這一段代碼,在堆中實例化了一段空間,用指針指向它,但調用display的時候括號里的“*”代表了什么?


正在回答

4 回答

指針和引用都沒搞清楚就跳到友元了??

0 回復 有任何疑惑可以回復我~

哈哈,要友善一點嘛,直接學c++怎么了

引用和指針參數傳遞其實就是abab的原則,

地址 a, 對象 b,要么a對a傳遞,要么b對b傳遞,

其中a對a傳遞為指針傳遞,傳的是地址。

b對b傳遞為對象傳遞,傳的是對象本身。

另外b對b傳遞還能用別名,給b取個名字b1,

對b1操作從而改變b,因為本質上b1和b是同一個對象

建議用指針或者引用,速度比較快

/*
友元函數?友元類
*/
#include<cstdio>
#include<iostream>
using?namespace?std;
class?coor{
????friend?void?display1(coor?&c);
????friend?void?display2(coor?c);
????friend?void?display3(coor?*c);
public:
????coor(int?x,int?y){
??????m_iX?=?x;
??????m_iY?=?y;
????}
????~coor(){}
private:
????int?m_iX;
????int?m_iY;
};
//void?display1(coor?&co);
//void?display2(coor?co);
//void?display3(coor?*co);
int?main(){
????coor?c1(3,5);?//從堆中實例化,這時候c1是對象本身,而display1中的?&co是c對象的引用
????coor?*c2?=?new?coor(2,4);?//從棧中實例化,c2是指針,而display2中co是對象本身(不建議),
????display1(c1);
????display2(*c2);?//找到指針指向的對象
????display3(c2);?//??也可以直接傳指針
????return?0;
}
void?display1(coor?&co){
????cout?<<?"m_iX:"?<<?co.m_iX?<<?endl;
cout?<<?"m_iY:"?<<?co.m_iY?<<?endl;
}
void?display2(coor?co){
????cout?<<?"m_iX:"?<<?co.m_iX?<<?endl;
cout?<<?"m_iY:"?<<?co.m_iY?<<?endl;
}
void?display3(coor?*co){
????cout?<<?"m_iX:"?<<?co->m_iX?<<?endl;
cout?<<?"m_iY:"?<<?co->m_iY?<<?endl;
}


3 回復 有任何疑惑可以回復我~

c不會就看c++?


1 回復 有任何疑惑可以回復我~
#1

HackerLZH

哈,我笑了
2020-02-09 回復 有任何疑惑可以回復我~

coordinate只是一段地址,*coordinate才是對象。display在傳參是需要傳入的是對象


0 回復 有任何疑惑可以回復我~
#1

天空mn

你這頭像差點讓我以為是我回復了這個問題,抓緊換頭像
2020-05-04 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之模板篇
  • 參與學習       91140    人
  • 解答問題       325    個

本C++教程力求即學即會,所有知識以實踐方式講解到操作層面

進入課程

如果main函數用堆實例化一個對象,傳參的時候為什么也要加上一個“*”?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號