当前位置: 首页 > news >正文

个人信息网站汾阳网站建设

个人信息网站,汾阳网站建设,株洲百度推广公司,作图在线制作目录 1.练习题:带解法限制求123...n 题目 分析 Myclass设计 在Sum_Solution()在需要调用n次构造函数 方法1:变长数组 方法2:new对象 完整代码 提交结果 2.静态成员函数和非静态成员函数的互相调用问题 静态成员函数可以调用非静态成员函数吗? 非静态成员函数可以调…

目录

1.练习题:带解法限制求1+2+3+...+n

题目

分析

Myclass设计

在Sum_Solution()在需要调用n次构造函数

方法1:变长数组

方法2:new对象

完整代码

提交结果

2.静态成员函数和非静态成员函数的互相调用问题

静态成员函数可以调用非静态成员函数吗?

非静态成员函数可以调用类的静态成员函数吗?

3.static函数的优势

当构造函数在类的private中类外调不了时,可以使用静态函数调用


1.练习题:带解法限制求1+2+3+...+n

题目

JZ64 求1+2+3+...+n

分析

读题发现题目对解法的限制比较严格:不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

如果使用递归,则需要使用if来判断返回条件;如果使用位运算,返回的结果n*(n+1)>>1会用到乘号,也不行

本题可以使用CD25.【C++ Dev】类和对象(16) static成员(上)文章提到的静态成员变量来解决,让构造函数和静态成员变量打配合可以完美解决

Myclass设计

尝试初始化n个对象,显然会调用n次构造函数,以此来进行n次加法

 设计框架:

class Myclass
{
public:Myclass(){//操作}
private://填写成员变量
};

n次加法应该遵循此顺序:+1、+2、+3、...、+n

需要用两个静态变量,一个存储累加的和(_ret),一个来控制每次相加的数字(_i)

则_ret初始化为0,_i初始化为1,执行一次构造函数时,_ret+=_i并且_i++

由于Myclass定义在Solution外,如果Sum_Solution()函数要取得_ret的值,在Myclass类中需要定义一个GetRet()函数来取得

class Myclass
{
public:Myclass(){_ret+=_i;_i++;}static int GetRet()//参数无this指针,可以使用Myclass::GetRet()来调用{return _ret;}
private:static int _i;static int _ret;
};
int Myclass:: _i=1;
int Myclass::_ret=0;

在Sum_Solution()在需要调用n次构造函数

如果使用while则会违背题意

int Sum_Solution(int n) 
{while(n--)//虽然可以通过,但是题目限定不能用while{Myclass obj; }     return Myclass::GetRet();
}
方法1:变长数组
int Sum_Solution(int n) 
{Myclass obj[n];return Myclass::GetRet();
}
方法2:new对象
int Sum_Solution(int n) 
{new Myclass[n];//b不用接收返回值return Myclass::GetRet();
}

完整代码

class Myclass
{
public:Myclass(){_ret+=_i;_i++;}static int GetRet(){return _ret;}
private:static int _i;static int _ret;
};
int Myclass:: _i=1;
int Myclass::_ret=0;class Solution 
{
public:int Sum_Solution(int n) {Myclass obj[n]; //或者使用new对象       return Myclass::GetRet();}
};

提交结果

2.静态成员函数和非静态成员函数的互相调用问题

静态成员函数可以调用非静态成员函数吗?

答:之前在CD25.【C++ Dev】类和对象(16) static成员(上)文章中的特点6提到过:原本的静态成员函数的参数是没有隐藏this指针的,而调用非静态成员函数需要传this指针,因此不可以调用

如果要强行调用非静态成员函数其实也是可以的,不过要手动传指针,通过ptr->nonstaticfunction()来调用

#include <iostream>
using namespace std;
class Myclass
{
public:static void staticfunction(Myclass* ptr){ptr->nonstaticfunction();}void nonstaticfunction(){cout << "void nonstaticfunction()" << endl;}
};int main()
{Myclass obj;obj.staticfunction(&obj); return 0;
}

运行结果:

非静态成员函数可以调用类的静态成员函数吗?

答:和第一问反过来,可以调用,例如以下代码:

#include <iostream>
using namespace std;
class Myclass2
{
public:static void staticfunction(){cout << "static void staticfunction()" << endl;}
};class Myclass1
{
public:void nonstaticfunction(){Myclass2::staticfunction();}
};int main()
{Myclass1 obj1;obj1.nonstaticfunction();return 0;
}

运行结果:

3.static函数的优势

当构造函数在类的private中类外调不了时,可以使用静态函数调用

例如在栈上创建对象:

#include <iostream>
using namespace std;
class Myclass
{
public:static Myclass Getobj(){Myclass obj;return obj;}
private:Myclass(){cout << "Myclass()" << endl;}
};int main()
{Myclass ret = Myclass::Getobj();return 0;
}

注意:不能使用非静态成员函数! 非静态成员函数需要隐式传this指针,而有this指针的前提:this指针指向已经创建好的对象

运行结果:

例如在堆上创建对象:

#include <iostream>
using namespace std;
class Myclass
{
public:static Myclass* Getobj(){return new Myclass;}
private:Myclass(){cout << "Myclass()" << endl;}
};int main()
{Myclass* ret = Myclass::Getobj();return 0;
}

*注:new会自动调用构造函数,这个特点后面文章再说,这里略过

运行结果:

http://www.dtcms.com/a/545799.html

相关文章:

  • 惠州市两学一做网站网站建设归工商局管还是工信局管
  • 仓储服务 东莞网站建设 技术支持做网站报价单
  • 自助建站信息网中国做二手房最大的网站有哪些
  • 四川省安监站网址团员关系没转就作废吗
  • 【零基础学MySQL】第二章:SQL类型
  • 程序员做网站给女朋友帝国后台网站如何设置自动刷新首
  • 仓颉语言变量声明与赋值深度解析
  • 宁波网站建设与推广方案安徽元鼎建设公司网站
  • Spring AI Alibaba 【三】
  • C++继承机制:面向对象编程的基石
  • 公司网站设计很好的怎么看一个网站是什么时候做的
  • pc不同网段间的通信过程
  • 成功移植游戏《四叶苜蓿》第二章——支持Linux和龙芯
  • 移动网站开发百科评价校园网站建设范例
  • 网站建设 别墅国家信用信息公示系统查询入口
  • 实验室安全教育与管理平台学习记录(二)化学类安全2
  • 武功县住房与城乡建设局网站太阳能建设网站
  • SAP-ABAP:SAP ABAP中的数学艺术:掌握向上取整与向下取整实例详解
  • OpenEuler中mysql这是在执行 MySQL 密码重置操作时出现的 “找不到mysqld_safe命令” 的错误场景。
  • GXDE 25.1 发布:系统优化若干
  • 【开题答辩全过程】以 病虫害监测管理系统的设计与实现为例,包含答辩的问题和答案
  • 深入浅出 MQTT:轻量级消息协议在物联网中的应用与实践
  • 天津网站开发自己怎么做商城网站视频教程
  • flash-attn安装卡在Building wheel for flash-attn (setup.py)
  • 【人工智能数学基础】什么是高斯分布/正态分布?
  • 医院网站建设策划怎么注册国外网站
  • 广州专业建网站公司微电影制作
  • 做网站买什么服务器上蔡专业网站建设
  • 计算机网络自顶向下方法15——应用层 P2P文件分发与BitTorrent协议
  • 深入理解 UDP:从协议基础到可靠实现与 QUIC 演进