c++类的使用

1、一个函数需要另一个类里面的函数做一些事情,这个类是一些不是一个处理方法,将这个类分化。

定义一个接口,将这个接口分化为多个具体处理方法的类(这个类继承接口类)。

例:

    函数调用

CurveDataParser curveParser(str);     //先进到大坑,大坑构造里面根据str分化进到小坑(坑为类)

curveParser.SetPath(path);            //设置路径

curveParser.ReadAllCurve(data);       //从小坑获取的数据返回

接口

class ICurveDataSet

{

public:

    virtual ~ICurveDataSet() = 0 {}

    virtual bool ReadAllCurve(data) = 0;

    virtual void ResetPath(const string &path) = 0;

}

大坑

class CurveDaraParser

{

public:

    jgCurveDataParser(LPCTSTR strType);

    virtual ~CurveDataParser(void);

    bool ReadAllCurve(data);

    void SetPath(const string &path);

private:

    ICurveDataSet * m_parser;   //具体的解析实例

    void InitParser(LPCTSTR strType);  //初始化解析实例

}

//大坑cpp 分化小坑

CurveDataParser::CurveDataParser(LPCTSTR strType)
{
m_parser = NULL;
InitParser(strType);
}

CurveDataParser::~CurveDataParser(void)
{
if( NULL != m_parser ) { delete m_parser; m_parser = NULL; }
}

// 初始化解析实例
void CurveDataParser::InitParser(LPCTSTR strType)
{
CString sType( strType );
sType.MakeLower();


if( _T("716") == sType )
{
m_parser = new jg716DataSet();
}
else if( _T("las") == sType )
{
m_parser = new jgLasDataSet();
}
else if( _T("dat") == sType )
{
m_parser = new jgDqDatDataSet();
}
else if( _T("wis") == sType )
{
m_parser = new jgWisDataSet();
}
else if ( _T("txt") == sType )
{
m_parser = new jgTxtDataSet();
}
}

//以一个小坑为例

class LasDataSet : public ICurveDataSet

{

public:

    LasDataSet();

public:

    virtual bool ReadAllCurve(data);

    void ResetPath(const string &path);

}

2、父类 xx = new 子类()与子类 xx = new 子类()的区别

子类继承父类的所有(包括属性以及方法), 也就是说子类包含的内容应该是比父类要大的. 如果正常环境下, 把一个父类转换成子类一定会损失精度.  但是如果父类对象本身就是用子类去new出来的, 就类似于一个本来就是儿子角色的人, 去装了一会儿父亲, 这个角色是可以在未来转换回去的, 但是一个父亲, 永远不可能去装儿子的.

父类 xx = new 子类()定义的对象无法调用非从父类继承的方法。

3、很典型的c++类面试题

class String
{
public:
  String(const char *str = NULL); // 通用构造函数
  String(const String &another); // 拷贝构造函数
  ~String(); // 析构函数
  String& operater =(const String &rhs); // 赋值函数
private:
  char* m_data; // 用于保存字符串
};

String::String(const char *str)
{
	if(str == NULL)
	{
		m_data = new char[1];
		m_data[0] = "\0";
	}
	else
	{
		int len = strlen(str) + 1;
		m_data = new char[len];
		strcpy(m_data, str);
	}
}

String::String(const String &another)
{
	m_data = new char[strlen(another) + 1];
	strcpy(m_data, another.m_data);
}

String::String& operator =(const String &rhs)
{
	if(&rhs == this) return *this;
	m_data = new char[strlen(rhs.m_data) + 1]
	strcpy(m_data, rhs.m_data);
	return *this;
}

String::~String()
{
	delete[] m_data;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值