我想查看构造函数、析构函数和复制构造函数的调用过程。源程序如下:
#include<iostream>
using namespace std;
enum CPU_Rank{p1=1,p2,p3,p4,p5,p6,p7};
class CPU
{
public:
CPU(CPU_Rank,int,float);
CPU(const CPU &);
~CPU();
CPU_Rank GetRank() const;
void SetRank(CPU_Rank);
int GetFrequency() const;
void SetFrequency(int);
float GetVoltage() const;
void SetVoltage(float);
void Run();
void Stop();
private:
CPU_Rank rank;
int frequency;
float voltage;
};
class RAM
{
public:
RAM(int,int);
RAM(const RAM &);
~RAM();
int GetFrequency() const;
void SetFrequency(int);
int GetCapacity() const;
void SetCapacity(int);
private:
int frequency;
int capacity;
};
class CDROM
{
public:
CDROM(int);
CDROM(const CDROM &);
~CDROM();
int GetTimes() const;
void SetTimes(int);
private:
int times;
};
class Computer
{
Computer(CPU,RAM,CDROM);
~Computer();
void Run();
void Stop();
CPU GetCpu() const;
RAM GetRam() const;
CDROM GetCdrom() const;
private:
CPU cpu;
RAM ram;
CDROM cdrom;
};
#include"computer.h"
CPU::CPU(CPU_Rank r,int f,float v):
rank(r),
frequency(f),
voltage(v)
{
cout<<"CPU constructor!"<<endl;
}
CPU::CPU(const CPU & rhs)
{
rank=rhs.GetRank();
frequency=rhs.GetFrequency();
voltage=rhs.GetVoltage();
cout<<"CPU copy constructor!"<<endl;
}
CPU::~CPU()
{
cout<<"CPU destructor!"<<endl;
}
CPU_Rank CPU::GetRank() const
{
return rank;
}
void CPU::SetRank(CPU_Rank r)
{
rank=r;
}
int CPU::GetFrequency() const
{
return frequency;
}
void CPU::SetFrequency(int f)
{
frequency=f;
}
float CPU::GetVoltage() const
{
return voltage;
}
void CPU::SetVoltage(float v)
{
voltage=v;
}
void CPU::Run()
{
cout<<"CPU operates!"<<endl;
}
void CPU::Stop()
{
cout<<"CPU stops!"<<endl;
}
RAM::RAM(int f,int c):
frequency(f),
capacity(c)
{
cout<<"RAM constructor!"<<endl;
}
RAM::RAM(const RAM & rhs)
{
capacity=rhs.GetCapacity();
frequency=rhs.GetFrequency();
cout<<"RAM copy constructor!"<<endl;
}
RAM::~RAM()
{
cout<<"RAM destructor!"<<endl;
}
int RAM::GetCapacity() const
{
return capacity;
}
void RAM::SetCapacity(int c)
{
capacity=c;
}
int RAM::GetFrequency() const
{
return frequency;
}
void RAM::SetFrequency(int f)
{
frequency=f;
}
CDROM::CDROM(int t):
times(t)
{
cout<<"CDROM constructor!"<<endl;
}
CDROM::CDROM(const CDROM & rhs)
{
times=rhs.GetTimes();
cout<<"CDROM copy constructor!"<<endl;
}
CDROM::~CDROM()
{
cout<<"CDROM destructor!"<<endl;
}
int CDROM::GetTimes() const
{
return times;
}
void CDROM::SetTimes(int t)
{
times=t;
}
Computer::Computer(CPU Mycpu,RAM Myram,CDROM Mycdrom):
cpu(Mycpu),
ram(Myram),
cdrom(Mycdrom)
{
cout<<"Computer constructor!"<<endl;
}
Computer::~Computer()
{
cout<<"Computer destructor!"<<endl;
}
CPU Computer::GetCpu() const
{
return cpu;
}
RAM Computer::GetRam() const
{
return ram;
}
CDROM Computer::GetCdrom() const
{
return cdrom;
}
int main()
{
CPU MyCpu(p6,1,1.5);
MyCpu.Run();
MyCpu.Stop();
cout<<"My cpus rank is "<<MyCpu.GetRank()<<endl;
cout<<"My cpus frequency is "<<MyCpu.GetFrequency()<<"MHz\n";
cout<<"My cpus volatage is "<<MyCpu.GetVoltage()<<"V\n";
cout<<endl;
RAM MyRam(133,256);
cout<<"My rams frequency is "<<MyRam.GetFrequency()<<"MHz\n";
cout<<"My rams capacity is "<<MyRam.GetCapacity()<<"MB\n";
cout<<endl;
CDROM MyCdrom(48);
cout<<"My cdroms time is "<<MyCdrom.GetTimes()<<"X\n";
Computer MyComputer(MyCpu,MyRam,MyCdrom);
return 0;
}
提示如下错误:
--------------------Configuration: MyCPU - Win32 Debug--------------------
Compiling...
main3.cpp
D:\Program Files\Microsoft Visual Studio\MyProjects\MyCPU\main3.cpp(144) : error C2248: Computer::Computer : cannot access private member declared in class Computer
d:\program files\microsoft visual studio\myprojects\mycpu\computer.h(50) : see declaration of Computer::Computer
D:\Program Files\Microsoft Visual Studio\MyProjects\MyCPU\main3.cpp(144) : error C2248: Computer::~Computer : cannot access private member declared in class Computer
d:\program files\microsoft visual studio\myprojects\mycpu\computer.h(51) : see declaration of Computer::~Computer
Error executing cl.exe.
main3.obj - 2 error(s), 0 warning(s)
我查看2001年的msdn,虽然里面有类似的情况,但未找到答案,麻烦大家帮忙分析一下,谢谢了!
class 的默认类型都是private,所以你应该这样定义:
class Computer
{
public:
Computer(CPU,RAM,CDROM);
~Computer();
void Run();
void Stop();
CPU GetCpu() const;
RAM GetRam() const;
CDROM GetCdrom() const;
private:
CPU cpu;
RAM ram;
CDROM cdrom;
};
up
楼上的楼上是对的