作者hsiehwei (开心最重要啦!!)
看板TransCSI
标题Re: [问题] 程式:C++ 台大90 第五、六题
时间Fri Jun 10 22:24:29 2005
※ 引述《deepdish (要和数学装熟..)》之铭言:
: ※ 引述《Elfiend (小孩)》之铭言:
: : 台大90年度转学考计概第六题
: 1 #include <iostream>
: 2 using namespace std;
: 3
: 4 class Ex
: 5 {
: 6 public:
: 7 Ex() { p = new int; }
: 8 void set(int i) { *p = i; }
: 9 int get() { return *p; }
: 10 private:
: 11 int *p;
: 12 };
: 13
: 14 int main()
: 15 {
: 16 Ex test1, test2;
: 17 test1.set(-1);
: 18 cout << test1.get() << "";
: 19 test2.set(-2);
: 20 test1 = test2;
: 21 cout << test1.get() << "";
: 22 test2.set(-3);
: 23 cout << test1.get() << endl;
: 24 system("pause");
: 25 return 0;
: 26 }
: : =====================================
: 程式 run 的结果是 -1 -2 -3
: : 对类别的看法是→公有的:二个函数set(设值)get(取值)可以给其他使用
: : 私有的: *p 内部自己使用的指标,不被外部程式影响
: 所以 main 不能直接呼叫 private,但是此程式并没有看到被直接呼叫的情况
: 应该只有 16 行宣告物件时有使用到 private
宣告时,会使用建构函数
预设建构函数为 Ex::Ex();
动到private成员的也不是main(),是物件本身,Ex::Ex();
: 而 public 很明显可以更动 *p 的值,不受 private 影响
: : 而我的问题是第17行:test1 = test2
: : 这个等号的意义是什麽???
: 等号代表 test1 物件指到 test2 的位置
: 结果就是两个物件指到同一位置
: 所以在这个程式中 test1 的值会等同於 test2 的值
设定运算子的原型为
Ex & Ex::operator=(const Ex &);
所以
test1 = test2;
会执行成员对成员的复制
test2::p的内容(位址)会复制到test1::p
(test1::*p = test2::p)
test1跟test2依然是不同的物件
test1也没有指到test2
除非 Ex * test = test2;
: : 如果私有的不被外部程式影响,那这个等号应该没有作用,所以会输出 -1 -1 -1
: : 如果这里会影响,传的是*p的值,那应该会输出 -1 -2 -2
: : 如果这里会影响,传的是p的值 ,那就是 -1 -1 -3
: : 哪个才对呢?我对类别的应用觉得很头大...
: 都不对
--
我的部落格
http://www.wretch.cc/blog/hsiehwei
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.143.164.92