我在抽象类上看this microsoft article。文章说
抽象类不能用于:
•变量或成员数据
•参数类型
•功能返回类型
•显式转换的类型
如果我理解正确,这句话意味着抽象类类型不能是另一个类的成员,另一个函数的参数或另一个函数的返回类型。
的含义是什么?
显式转化的类型
这是否意味着我们不能类似(BaseClass)obj1
那样obj1
属于另一种类型的东西?如果这种理解为真,那么在将一个对象转换为另一个类时可能是必要的吗?
答案 0 :(得分:0)
抽象类是一个专门用作基类的类。抽象类包含至少一个纯虚函数。通过在类声明中的虚拟成员函数的声明中使用纯说明符(= 0)来声明纯虚函数。 以下是抽象类的示例:
class AB {
public:
virtual void f() = 0;
};
函数AB :: f是一个纯虚函数。函数声明不能同时具有纯说明符和定义。例如,编译器将不允许以下内容:
struct A {
virtual void g() { } = 0;
};
您不能将抽象类用作参数类型,函数返回类型或显式转换的类型,也不能声明抽象类的对象。但是,您可以声明指向抽象类的指针和引用。以下示例演示了这一点:
struct A {
virtual void f() = 0;
};
struct B : A {
virtual void f() { }
};
// Error:
// Class A is an abstract class
// A g();
// Error:
// Class A is an abstract class
// void h(A);
A& i(A&);
int main() {
// Error:
// Class A is an abstract class
// A a;
A* pa;
B b;
// Error:
// Class A is an abstract class
// static_cast<A>(b);
}
答案 1 :(得分:0)
这意味着你不能做这样的事情:
func applicationDidEnterBackground(_ application: UIApplication) {
if((self.imgViewStaticImage) != nil)
{
self.imgViewStaticImage?.removeFromSuperview()
}
self.imgViewStaticImage = UIImageView(frame: (self.window?.bounds)!)
self.imgViewStaticImage?.image = UIImage(named: "banner")
self.window?.addSubview(self.imgViewStaticImage!)
self.window?.bringSubview(toFront: self.imgViewStaticImage!)
}
func applicationWillEnterForeground(_ application: UIApplication) {
if((self.imgViewStaticImage) != nil)
{
self.imgViewStaticImage?.removeFromSuperview()
}
}
如果class base
{
public:
virtual void foo() = 0;
};
class derived : public base
{
public:
void foo()
{
}
};
int main()
{
derived pDerived;
static_cast<base>(pDerived); // Error
}
类不是抽象的,你就可以编译它。