gpt4 book ai didi

c# - C++实践类似于C#的只读数据成员行为

转载 作者:行者123 更新时间:2023-11-30 01:20:04 40 4
gpt4 key购买 nike

我学了一点 C#,现在我正在学习 C++。在 C# 中,可以使用 get 和 set 运算符隐藏数据,通过提供“get”而不是“set”可以将数据成员呈现为“只读”。

这将允许一个类(Person)以这样一种方式包含另一个类(Account),即 Account 类的公共(public)函数可供 Person.Account 的用户使用,但用户不能直接更改 Account 类,因为它是只读的。

这在下面的代码示例中应该更清楚。

我的问题是,由于 C++ 不提供漂亮的 get/set 语法,是否有与以下代码类似的 C++?

using System;

class Person
{
private string _Name;
public string Name { get { return _Name; } set { _Name = value; } }

private Account _Account;
public Account Account { get { return _Account; } }

public Person()
{
_Name = "";
_Account = new Account();
}
}

class Account
{
private decimal _Balance;
public decimal Balance { get { return _Balance; } }

public Account()
{
_Balance = 0;
}
public void Deposit(decimal deposit)
{
_Balance += deposit;
}
}

class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.Name = "John Doe";

// not allowed: p.Account = new Account();
// Property or indexer 'CSharp.Person.Account' cannot be assigned to -- it is read only

// allowed: the Account Object's public functions are available
p.Account.Deposit(1000);

Console.WriteLine(p.Account.Balance.ToString());
// console says "1000"
}
}

最佳答案

这些特殊成员在 C# 术语中称为“属性”,在 C++ 中没有直接等效项。您可以将成员设为公开或私有(private),并定义 getter 和 setter 方法,但您将没有 C# 的语法糖,您必须显式调用它们。

实际上,可以用 C++ 编写此行为,但它很丑陋,详见此处:http://www.cplusplus.com/forum/general/8147/

关于c# - C++实践类似于C#的只读数据成员行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19870877/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com