c++ 不能被继承的类怎么写
展开全部
题目:用C++ 设计一个不能被继承的类。
分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。
在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。
首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数、析构函数而导致编译错误。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xkyx_cn/archive/2008/04/02/2245038.aspx
分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。
在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。
首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数、析构函数而导致编译错误。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xkyx_cn/archive/2008/04/02/2245038.aspx
参考资料: http://blog.csdn.net/xkyx_cn/archive/2008/04/02/2245038.aspx
展开全部
代码:
#include<iostream>
using namespace std;
class SealedClass
{
private: // 私有成员
SealedClass() { }; // 构造函数
~SealedClass() { }; // 析构函数
public:
int m_number;
static SealedClass* GetInstance(int number) // 用于构造的函数
{
SealedClass * pInstance = new SealedClass();
pInstance->m_number = number;
return pInstance;
}
static void DeleteInstance(SealedClass* pInstance) // 用于析构的函数
{
delete pInstance;
pInstance = 0;
}
};
int main(void)
{
SealedClass * p = SealedClass::GetInstance(9);
cout<<"m_number is : "<<p->m_number<<endl;
SealedClass::DeleteInstance(p);
cout<<"m_number is : "<<p->m_number<<endl;
return 0;
}
#include<iostream>
using namespace std;
class SealedClass
{
private: // 私有成员
SealedClass() { }; // 构造函数
~SealedClass() { }; // 析构函数
public:
int m_number;
static SealedClass* GetInstance(int number) // 用于构造的函数
{
SealedClass * pInstance = new SealedClass();
pInstance->m_number = number;
return pInstance;
}
static void DeleteInstance(SealedClass* pInstance) // 用于析构的函数
{
delete pInstance;
pInstance = 0;
}
};
int main(void)
{
SealedClass * p = SealedClass::GetInstance(9);
cout<<"m_number is : "<<p->m_number<<endl;
SealedClass::DeleteInstance(p);
cout<<"m_number is : "<<p->m_number<<endl;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义为高级类 加上final关键词
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C++类继承 构造函数 定义和实现的写法
//C.h
class C
{
public:
C();//构造函数定义
~C();//析构函数定义
};
//C.cpp
#indlude "C.h"
C::C(){...}//构造函数实现
C::~C(){...}//析构函数实现
//D.h
class D:classC//D继承C
{
...
};
以上是一个框架
以下是一个实例 为节省空间 定义和实现写到一起了
//TreeBaseNode.h
#pragma once
#include <iostream>
using namespace std;
class CTreeBaseNode
{
public:
CTreeBaseNode(int t)
{
m_Type = t;
m_L = 0;
m_R = 0;
m_P = 0;
}
virtual ~CTreeBaseNode()
{
m_L = 0;
m_R = 0;
m_P = 0;
}
virtual void Show() = 0;
int m_Type;
CTreeBaseNode* m_L;
CTreeBaseNode* m_R;
CTreeBaseNode* m_P;
};
//TreeNodeA.h
#pragma once
#include "treebasenode.h"
class CTreeNodeA :
public CTreeBaseNode
{
public:
CTreeNodeA(int v):CTreeBaseNode(0)
{
m_Value = v;
}
virtual ~CTreeNodeA(void){}
virtual void Show()
{
cout<<m_Value<<endl;
}
int m_Value;
};
//C.h
class C
{
public:
C();//构造函数定义
~C();//析构函数定义
};
//C.cpp
#indlude "C.h"
C::C(){...}//构造函数实现
C::~C(){...}//析构函数实现
//D.h
class D:classC//D继承C
{
...
};
以上是一个框架
以下是一个实例 为节省空间 定义和实现写到一起了
//TreeBaseNode.h
#pragma once
#include <iostream>
using namespace std;
class CTreeBaseNode
{
public:
CTreeBaseNode(int t)
{
m_Type = t;
m_L = 0;
m_R = 0;
m_P = 0;
}
virtual ~CTreeBaseNode()
{
m_L = 0;
m_R = 0;
m_P = 0;
}
virtual void Show() = 0;
int m_Type;
CTreeBaseNode* m_L;
CTreeBaseNode* m_R;
CTreeBaseNode* m_P;
};
//TreeNodeA.h
#pragma once
#include "treebasenode.h"
class CTreeNodeA :
public CTreeBaseNode
{
public:
CTreeNodeA(int v):CTreeBaseNode(0)
{
m_Value = v;
}
virtual ~CTreeNodeA(void){}
virtual void Show()
{
cout<<m_Value<<endl;
}
int m_Value;
};
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c++中有关键字final?好像是java的吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询