不能继承的类

来源:互联网 发布:什么叫淘宝旺铺智能版 编辑:程序博客网 时间:2024/05/29 16:42
设计一个不能被继承的类

1.定义公有静态成员函数
#include<iostream>
using namespace std;

class A
{
public:
static A* getA(int x)
{

cout << "A() " << endl;
return new A(x);
//这里用new,而直接调用是因为静态方法只能访问类的静态成员,不能访问类的非静态成员;
//A* pa = (A*)malloc(sizeof(A));
//pa->A::A⑶;
//return pa;
}
static void deleteA(A* p)
{
cout << "A() _a = " << endl;
delete p;
}
void fun()
{
cout << _a << endl;
}
private:
A(int x)
:_a(x)
{
}
~A()
{
}
int _a;
};
class B : public A
{
public:
B()
:_b(1)
{
cout << "B()" << endl;
}
private:
int _b;
};

int main()
{
A* pa = A::getA(10);
//pa->deleteA(pa);
pa->fun();
B bb;
return 0;
}
静态方法与静态变量一样,属于本身,而不属于那个类的一个对象。调用一个被定义为static的方法,可以通过在它前面加上这个类的名称,也可以像调用非静态方法一样通过类对象调用。
我们在使用时要注意:
静态方法只能访问类的静态成员,不能访问类的非静态成员;
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
静态方法既可以用实例来调用,也可以用类名来调用

2.虚继承方法
template<class T>
class Q
{
friend T;
private:
Q()
{}
~Q()
{}
};
class A : virtual public Q<A>
{
public:
A(int x)
:_a(x)
{
cout << "A()" << endl;
}
~A()
{
cout << "~A()" << endl;
}

private:
int _a;
};


class B
{
public:
B()
{
cout << "B()" << endl;
}
~B()
{
cout << "~B()" << endl;
}
};

int main()
{
B bb;
A aa(10);
return 0;
}

原创粉丝点击