面向对象的编程逻辑

时间:2012-06-03 16:51:41

标签: c++ oop

我正在学习C ++中OOP的基本概念,但我遇到了一个逻辑问题。

#include <iostream>
#include <conio.h>

using namespace std;

class A {
    int i;
public:
    void set(int x) {
        i=x;
    }
    int get() {
        return i;
    }
    void cpy(A x) {
        i=x.i; 
    }
};

int main()
{
    A x, y;
    x.set(10);
    y.set(20);

    cout << x.get() << "\t" << y.get() << endl;
    x.cpy(y);
    cout << x.get() << "\t" << y.get() << endl;
    getch();
}

我想在上面的代码中知道为什么我能够访问x.i [第19行],它是不同对象中的私有成员。即使私有范围限制在同一个类中也是如此该对象作为参数传递?

6 个答案:

答案 0 :(得分:13)

C ++中的

private表示对类是私有的,而不是对象的私有。两种解释都是可能的,实际上有些语言选择了另一种语言。但是大多数语言都像C ++,并且允许同一类的对象访问另一个实例的私有成员。

答案 1 :(得分:5)

变量xy是同一个类的两个实例。它们是不同的对象,但它们属于同一个类。这就是为什么可以从成员函数访问私有成员。

答案 2 :(得分:2)

类的私有属性或方法意味着无法直接从类范围外访问它。因为公共方法是在一个类中定义的,我们可以通过它来访问和操纵私有成员的值。

在上面的示例中,您不是直接从对象访问'i'而是通过公共方法操作它。

这样想:你有一个银行账户,你在银行的钱是私人会员。你不能直接去银行自己拿钱。银行里的收银员就像是一种可以访问私人财产的公共方法,即你的钱,你可以通过收银员操纵你的钱。

答案 3 :(得分:0)

cpy(A x)是该类的成员,它可以访问private个字段和方法。

private关键字限制来自其他类(对象)的访问以访问字段。属于某个类的任何代码都可以访问自己的私有成员(字段或方法)。

答案 4 :(得分:0)

一个类可以访问它自己的私有数据成员。

这也意味着如果您有任何处理两个或更多实例的函数(this以及作为参数传递的内容),您可以访问对象的私有(和公共)变量/方法

答案 5 :(得分:0)

  

即使将对象作为参数传递,私有范围也不限于同一个类吗?

是的,这就是$customer = $customers->item(0)->appendChild($customer); function insertCustomer() { try { $xmlFile = "../../data/customer.xml"; $doc = DOMDocument::load($xmlFile); $doc->formatOutput = true; $customer = $doc->createElement('customer'); $customers = $doc->getElementsByTagName("customers"); $customer = $customers->item(0)->appendChild($customer); $newID = getLastId() + 1; $id = $doc->createElement('id'); $idValue = $doc->createTextNode($newID); $id->appendChild($idValue); $customer->appendChild($id); $name1 = $doc->createElement('first_name'); $nameValue = $doc->createTextNode($_GET["name"]); $value2 = $name1->appendChild($nameValue); $name = $customer->appendChild($name1); $name = $doc->createElement('surname'); $nameValue = $doc->createTextNode($_GET["name"]); $value2 = $name->appendChild($nameValue); $name = $customer->appendChild($name); $name = $doc->createElement('password'); $nameValue = $doc->createTextNode($_GET["password"]); $value2 = $name->appendChild($nameValue); $name = $customer->appendChild($name); $name = $doc->createElement('email'); $nameValue = $doc->createTextNode($_GET["email"]); $value2 = $name->appendChild($nameValue); $name = $customer->appendChild($name); $name = $doc->createElement('phone'); $nameValue = $doc->createTextNode($_GET["phone"]); $value2 = $name->appendChild($nameValue); $name = $customer->appendChild($name); $doc->save($xmlFile ); } catch(Exception $e) { echo $e;} echo "customer successfully registered and your new Id = ". $newID; } 正在访问同一类中的私有成员x,即 A 类。