下面给大家介绍下C++软件的学习小结,希望可以帮到您哦!
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。
一个基类及其继承类的实现:
class Base
{
public:
Base(const char *s=NULL);
Base(const Base& rth);
Base & operator=(const Base & oth);
virtual ~Base();
private:
char *m_data;
};
Base::Base(const char* s)
{
if(s==NULL)
{
m_data=new char[1];
m_data[0]='\0';
}
else
{
int length=strlen(s);
m_data=new char[length+1];
strcpy(m_data,s);
}
}
Base::Base(const Base & oth)
{
int len=strlen(oth.m_data);
m_data=new char[len+1];
strcpy(m_data,oth.m_data);
}
Base & Base::operator=(const Base & oth)
{
if(this==&oth) return *this;
delete []m_data;
int len=strlen(oth.m_data);
m_data=new char[len+1];
strcpy(m_data,oth.m_data);
return *this;
}
Base::~Base()
{
delete[] m_data;
}
class Derived : public Base
{
public:
Derived(const char* s=NULL,int a=0);
Derived(const Derived& oth);
Derived& operator=(const Derived& oth);
private:
int m;
};
Derived::Derived(const char* s,int a):Base(s),m(a){ }
Derived::Derived(const Derived& oth):Base(oth),m(oth.m){ }
Derived& Derived::operator=(const Derived& oth)
{
if(this==&oth) return *this;
Base::operator=(oth);
m=oth.m;
return *this;
}
C++编译器不支持模板头文件和实现代码分离的编译
在分离式编译的环境下,编译器编译某一个.cpp文件时并不知道另一个.cpp文件的存在,也不会去查找(当遇到未决符号时它会寄希望于连接器)。这种模式在没有模板的情况下运行良好,但遇到模板时就不行,因为模板仅在需要的时候才会具现化出来,所以,当编译器只看到模板的声明时,它不能具现化该模板,只能创建一个具有外部连接的符号并期待连接器能够将符号的地址决议出来。然而当实现该模板的.cpp文件中没有用到模板的具现体时,编译器懒得去具现,所以,整个工程的.obj中就找不到一行模板具现体的二进制代码,于是连接器也傻了!
2021-07-09 14:57
2021-07-08 14:39
2021-07-08 14:39
2021-07-08 14:27
2021-07-08 14:26
2021-07-08 14:25
2021-07-07 15:33
2021-07-07 15:32
2021-07-07 15:31
2021-07-07 15:08
2021-07-07 15:06
2021-07-06 14:23
2021-07-06 14:22
2021-07-06 14:21