c++ - 如何禁止简单的赋值 MyClass=int?

标签 c++ class constructor

如果我有一个类具有这样的属性:

struct MyClass {
   double **arowofpointers;
   int capacity;
};

现在,如果任务说“确保主函数中的这行代码是合法的:

MyClass a(10); //makes a variable whose type is MyClass that has the capacity of 10

但是要确保main函数中的下面这行代码是不合法的:

MyClass a=10;

不过,main 函数中的以下代码行应该是合法的:

a=b+c;

其中a,b,c均为MyClass类型的变量。

我应该制作哪些构造函数?我应该在删除时设置什么吗?

最佳答案

像这样构建MyClass类型的实例

MyClass a(10);

需要一个带有整数参数的构造函数:

class MyClass {
  public:
    MyClass(int param);

  // ...
};

但由于默认情况下构造函数是隐式的(不幸的是),允许 MyClass a = 10;,您需要将其显式化:

// This constructor must be called explicitly via MyClass(int)
explicit MyClass(int param);

这将使编译器在遇到 MyClass a = 10; 时报错。

对于您问题的运算符部分,您可能想看看 at this (“算术运算符”部分)。

关于c++ - 如何禁止简单的赋值 MyClass=int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52423137/

相关文章:

c++ - 如何删除 C++ 中文本(输出)的拆分?

java - 使用终端从文件夹 Mac 运行 Java 程序

python - 在没有冗余代码/文档字符串的情况下转发/重定向 python 类中的方法/属性的最佳方法?

c++ - 如果函数具有相同的名称,如何调用构造函数

c++ - 全局构造函数调用不在 .init_array 部分

c++ - 将 QProgressBar 设置为从逻辑层更新的正确方法是什么?

c++ - 好友声明 : Is this a bug in clang?

c++ - 多个 if-else 测试的更简单方法

Python - 我应该使用只读 @property 而不使用 init 或 setter 吗?

派生类的 C++ CRTP 构造函数