如何使函数返回一个类呀?

zbstone 2002-03-26 11:11:00
各位高手好,我才刚开始进入C++的世界
现在遇到一个难题:
我需要使类中的一个公有函数返回这个类,如何实现
请指教!
这个程序是C++程序,不涉及VC
用类实现复数的四则运算
以下是我的程序源码:
#include"complex.h"
void main()
{
ComplexOper comp1,comp2,comp3;
comp1.SetCompOper(3.5,2.7);
comp2.SetCompOper(5.6,34.4);
comp3=comp1.AddComp(comp2);
comp3.display();
}


#ifndef complex_h_
#define complex_h_

#include <iostream.h>
//复数基本四则运算通过类的实现

class ComplexOper
{
public:
ComplexOper();
void SetCompOper(const double dReal,const double dImag);
ComplexOper AddComp(ComplexOper);
//void SubComp();
//void MulComp();
//void DivComp();
void display();
private:
double RealPart;
double ImagPart;
};

ComplexOper::ComplexOper()
{
RealPart=ImagPart=0.0;
}

void ComplexOper::SetCompOper(const double dReal,const double dImag)
{
RealPart=dReal;
ImagPart=dImag;
}

ComplexOper ComplexOper::AddComp(ComplexOper Comp)
{
double x,y;
x=RealPart+Comp.RealPart;
y=ImagPart+Comp.ImagPart;
return ComplexOper(x,y);
}

void ComplexOper::display()
{
cout<<RealPart<<(ImagPart>0 ? "+" :"" )<<ImagPart<<endl;
}

#endif
恳请指教!
...全文
159 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbstone 2002-03-29
  • 打赏
  • 举报
回复
oyf888(欧阳锋) :谢谢赐教,不过如果想输出
那么怎么实现,外加输出语句吗?
oyf888 2002-03-28
  • 打赏
  • 举报
回复
重载操作符operator +,-,*,/

same as:
comp3=comp1+comp2;
comp4=comp1-comp2;

这个类属于纯运算类, 不宜带输出功能,display就免了吧。

rovoboy 2002-03-27
  • 打赏
  • 举报
回复
这样的话使用重载操作符比较好,使用方便,符合习惯。
看看
http://www.umlchina.com/xprogrammer/issue/3/abstractclass.htm
可能会有所帮助
zbstone 2002-03-27
  • 打赏
  • 举报
回复
STL

虽然我听说个这个STL,不过还不是很清楚究竟是什么,因为刚刚蹋入VC这个世界,其实也只能说是刚刚开始学习一些面向对象的设计思想(而且还只是局限于C++)所以恳请各位前辈多多指教,先在此谢过了!
zbstone 2002-03-27
  • 打赏
  • 举报
回复
使用指针吗?不过这个会降低程序性能,而且我不希望改变传了参数的值
e_notimpl 2002-03-26
  • 打赏
  • 举报
回复
加一个Copy构造函数
vc8 2002-03-26
  • 打赏
  • 举报
回复
STL
dongfa 2002-03-26
  • 打赏
  • 举报
回复
当作参数传入

如:
int MyFunc(CMyClass * ddd)
{
...
}
CMyClass d;
MyFunc(&d);
zbstone 2002-03-26
  • 打赏
  • 举报
回复
我现在已经实现了
#ifndef Ex_complex_h
#define Ex_complex_h
//类实现复数的四则运算
#include <iostream.h>
#include <iomanip.h>

class Complex
{
public:
Complex();
void SetComplex(double,double);
Complex ComplexAdd(Complex);
Complex ComplexMin(Complex);
Complex ComplexMul(Complex comp1);
Complex ComplexDiv(Complex comp1);
void display();
private:
double RealPart;
double ImagPart;
};

Complex::Complex()
{
RealPart=ImagPart=0.0;
}

void Complex::SetComplex(double x,double y)
{
RealPart=x;
ImagPart=y;
}

Complex Complex::ComplexAdd(Complex comp1)
{
Complex comp;
double x,y;
x=RealPart+comp1.RealPart;
y=ImagPart+comp1.ImagPart;
comp.SetComplex(x,y);
return comp;
}

Complex Complex::ComplexMin(Complex comp1)
{
Complex comp;
double x,y;
x=RealPart-comp1.RealPart;
y=ImagPart-comp1.ImagPart;
comp.SetComplex(x,y);
return comp;
}

Complex Complex::ComplexMul(Complex comp1)
{
Complex comp;
double x,y;
x=RealPart*comp1.RealPart-ImagPart*comp1.ImagPart;
y=ImagPart*comp1.RealPart+RealPart*comp1.ImagPart;
comp.SetComplex(x,y);
return comp;
}

Complex Complex::ComplexDiv(Complex comp1)
{
Complex comp;
double x,y,z;
z=comp1.RealPart*comp1.RealPart+comp1.ImagPart*comp1.ImagPart;
x=(RealPart*comp1.RealPart+ImagPart*comp1.ImagPart)/z;
y=(ImagPart*comp1.RealPart-RealPart*comp1.ImagPart)/z;
comp.SetComplex(x,y);
return comp;
}

void Complex::display()
{
cout<<RealPart<<(ImagPart>0?"+":"");
cout<<(ImagPart==0?"":"i")<<ImagPart<<endl;
}

#endif
#include "Ex_complex.h"


void main()
{
Complex comp1,comp2,comp3,comp4,comp5,comp6;
comp1.SetComplex(2.3,4.5);
comp2.SetComplex(6.7,4.5);
comp1.display();
comp2.display();
comp3=comp1.ComplexAdd(comp2);
comp3.display();
comp4=comp1.ComplexMin(comp2);
comp4.display();
comp5=comp1.ComplexMul(comp2);
comp5.display();
comp6=comp1.ComplexDiv(comp2);
comp6.display();
}
不过不知道是否真正体现了类的设计思想,
是否有更好的方法
哪位高手指教一二:)
代码转载自:https://pan.quark.cn/s/a4b39357ea24 LA 1010 逻辑分析仪被视作一种效能卓越的数字信号分析设备,其核心功能在于对数字通信协议,例如I²C,进行检测与解构。本资源将集中阐述LA 1010的操作流程以及如何借助该设备对I²C协议的波形展开分析。 确保逻辑分析仪被正确地连接至目标系统是极为关键的环节。在运用LA 1010的过程中,必须将分析仪的通道0与通道1分别对应连接至目标装置的SCL(时钟)与SDA(数据)线路。务必保证连接的稳固性且无任何干扰因素,以此确保数据采集的精确度。 随后,需要设定采样参数。采样频率对于能否成功捕捉到信号具有决定性的作用。针对I²C协议,通常选用的采样频率范围介于100kHz到400kHz之间,这一范围的选择取决于实际应用场景中I²C总线的运行速度。然而,LA 1010所能达到的最高采样速率可能高达500MHz,因此需要根据具体需求进行相应的调整。此外,还必须精心挑选适配目标设备工作电压的电压等级,例如3.3V、5V或1.8V。 在软件操作层面,需要选取恰当的通道与协议种,即I²C。一旦启动采样,逻辑分析仪便开始记录相关数据。软件界面通常会实时展示波形图,为观察与分析提供便利。 关于I²C协议波形的解读,我们可以遵循以下步骤: 1. 总线处于空闲状态时:SCL与SDA均维持在高电平位置,这表明总线当前未进行数据传输。 2. 传输起始信号:当SCL处于高电平期间,SDA线从高电平转换至低电平,此动作标志着数据传输的开始。 3. 地址、数据及应答的识别:在每一个SCL高电平脉冲的持续时间内,SDA线上的电平状态代表了数据位。地址与数据的传输均为双向过程,而读写标识则由SDA线上的电平来...
内容概要:本文介绍了一种基于有限元分析(FEA)获取的磁通链接图来构建高精度永磁同步电机(PMSM)数学模型的方法,并在Simulink环境中实现仿真。该方法通过有限元软件提取电机在不同工况下的非线性磁通特性数据,建立精确的磁链-电流-转子位置映射关系,有效克服了传统线性模型在反映铁芯饱和、交叉耦合等非线性效应方面的局限性。所构建的模型能够更真实地模拟PMSM的实际电磁行为,适用于高性能控制算法(如矢量控制、直接转矩控制、模型预测控制等)的研发与验证,显著提升了控制系统在动态响应、效率优化和稳定性方面的仿真准确性。; 适合人群:具备电机控制理论基础、熟悉有限元分析与Simulink仿真的研究生、科研人员及从事电机设计与驱动系统开发的工程技术人员。; 使用场景及目标:①用于高精度永磁同步电机控制系统的设计、仿真与性能评估;②支持先进控制策略(如MPC、滑模控制、自适应控制)在非线性电机模型上的验证与优化;③为电机参数敏感性分析、能效优化、故障诊断与容错控制研究提供可靠的仿真平台; 阅读建议:建议读者结合ANSYS Maxwell、JMAG等有限元工具与Matlab/Simulink进行联合仿真,掌握从电磁场建模、数据提取、查表插值到控制系统集成的完整流程,并参考文中模型架构与数据处理方法,逐步复现、验证并拓展适用于特定电机结构的高保真仿真模型。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧