oop基础(Boolan)

虽然写代码有一年多了,但是转行开始写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++工程师。下次重点复习一下对指针的理解。

你可能感兴趣的:(oop基础(Boolan))