虽然写代码有一年多了,但是转行开始写C++仍然能感觉自己基础欠缺。所以打算花几个月的时间系统的复习一下C++基础知识。
C++作为一种深入底层的高级语言,根据应用目标的可以有着完全不同的应用方式,面向过程和面向对象,各有优劣。现在主要说一说面向对象的部分。
根据Class Member类型不同,我们可以简单的将Class分为有指针成员和无指针成员两种类型。从代码经验来看,大部分有一定复杂度的类都会包含指针成员,因为很少有类能够在设计之初就确定所有成员的大小,使用指针成员能给类的使用和维护带来很多好处。唯一要注意的是,不包含指针成员的类可以使用类的默认析构函数,而包含指针成员的类需要自定义析构函数,在对象使用完以后,主动释放指针指向的地址。
例如:
class String
{
public:
String (const char* cstr=0);
String (const String& str);
String & operator= (const String& str);
~String();
char* get_c_str() const {return m_data;}
private:
char* m_data;
};
inline
String::~String()
{
delete[] m_data;
}
类种复杂主要在与类的多重继承,虚类的定义与实现,指针对象与函数的定义和使用,模板类使用等等方面。但是在这个之前,先复习一下类的基础知识。
类是一种特殊的结构,类种包括 了成员函数和成员数据。这些成员根据功能可以是私有、公有以及保护。一般的类会包括私有的数据成员,面向这些数据成员的方法,类的构造方法和析构方法,上文种的代码就包括了这些成员和方法。
类的构造函数可以有多个,类似与函数的重载,根据参数的不同调用不同的构造函数。这里只举一个简单的例子:
inline
String::String(const String& str)
{
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
}
要特别注意构造函数的写法,构造函数名字和类相同,并且没有返回值。
这里有一个操作符重载,也实现了类似构造函数的功能,这里函数返回了一个指向类对象的指针。
inline
String& String::operator =(const String& str)
{
if (this==&str)
return *this;
else
{
m_data=new char[strlen(str.m_data)+1];
strcpy(m_data, str.m_data);
return *this;
}
}
刚开始写日志,感觉简书并不是很好用,至少默认的编辑模式对代码应用不是很方便,考虑查查使用方法或者换到github上面写。
相对而言,这些基础的面向对象的知识人都不难理解。主要还是一些违背自然思维的东西阻碍人成为合格的C++工程师。下次重点复习一下对指针的理解。