C++创建对象加括号和不加括号的区别

本文讨论了如何在编程中创建类的对象,包括通过构造函数和new关键字。构造函数用于初始化对象,而new关键字则在堆内存中分配空间。默认构造函数被调用时,无参数的new表达式创建对象。对于内置类型,new运算符可以用于初始化,如newint(1)创建并初始化为1的整数对象。
摘要由CSDN通过智能技术生成

1、一个类或者是有构造函数的对象。

①类名 对象名;  ->默认调用 对象名() 这个构造函数,在栈中存在对象名,在堆中存在实际对象。

②类名 对象名(一个以上参数); ->默认调用对应的构造函数,在栈中存在对象名,在堆中存在实际对象。

③类名 对象名(); ->不调用任何构造函数,Myclass a(), int func() 对比  Myclass a() 相当于申明一个函数 这个函数的返回类型是Myclass。

2、使用new 关键字创建对象

①  Myclass *p1 = new Myclass();

② Myclass *p2 = new Myclass;

-  ① ② 都是调用默认构造函数

- 对与内置类型,加括号可以进行初始化

  int *p3 = new int(1); // 1  

  int *p4 = new int(); // 0

  int *p5 = new int;  // 0

以下是使用贪心算法实现括号使算式的值最大的完整 C++ 代码: ```c++ #include <iostream> #include <string> #include <vector> #include <stack> using namespace std; string addParentheses(string expr) { // 首先对表达式进行一次乘法和除法的运算 vector<int> nums; vector<char> ops; int i = 0; while (i < expr.size()) { if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/') { ops.push_back(expr[i]); i++; } else { int j = i; while (j < expr.size() && expr[j] != '+' && expr[j] != '-' && expr[j] != '*' && expr[j] != '/') { j++; } nums.push_back(stoi(expr.substr(i, j-i))); i = j; } } // 逐步括号 while (nums.size() > 1) { // 找到当前表达式中优先级最低的运算符 int min_op = -1; int min_val = INT_MAX; for (int i = 0; i < ops.size(); i++) { if (ops[i] == '+' || ops[i] == '-') { int val = (ops[i] == '+') ? (nums[i] + nums[i+1]) : (nums[i] - nums[i+1]); if (val < min_val) { min_val = val; min_op = i; } } } // 在优先级最低的运算符处括号 nums[min_op] = '(' + to_string(nums[min_op]) + ops[min_op] + to_string(nums[min_op+1]) + ')'; nums.erase(nums.begin() + min_op + 1); ops.erase(ops.begin() + min_op); } return nums[0]; } int main() { string expr = "1+2*3-4/5*6+7"; string result = addParentheses(expr); cout << result << endl; // 输出 ((1+(2*3))-((4/5)*6))+7 cout << eval(result.c_str()) << endl; // 输出 6.2 return 0; } ``` 使用以下命令编译并运行: ``` g++ -o add_parentheses add_parentheses.cpp ./add_parentheses ``` 可以看到,算法成功地将原表达式上了括号,使得表达式的值最大。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值