当前位置:   article > 正文

不能继承的类_不能被继承用new修饰此类

不能被继承用new修饰此类
设计一个不能被继承的类

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;
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/325122
推荐阅读
相关标签
  

闽ICP备14008679号