c++ 类 静态类型与动态类型 匹配

#include <iostream>
using namespace std;

class qq{
};

class sonqq: public qq{
};

class wx{
};

class A{

public:

	virtual void f1(qq *arg )  //虚函数 表示可以重写
	{
		cout<<"A qq"<<endl;
	}

	virtual void f1(wx *arg)
	{
		cout<<"A wx"<<endl;
	}

	virtual void f1(sonqq *arg )
	{
		cout<<"A sonqq"<<endl;
	}
};

class B: public A{

public:

	void f1(qq *arg)
	{
		cout <<"B qq"<<endl;

	}
	
	void f1(wx *arg)
	{
		cout<<"B wx"<<endl;
	}

	void f1(sonqq *arg )
	{
		cout<<"B sonqq"<<endl;
	}
};

int main()
{
	A *b1 = new B(); //b1的类型是A,只能调用 A 中已有方法
	
	qq *q1 = new sonqq();

	b1->f1(q1); //q1 静态类型是 qq
	b1->f1(new sonqq()); //new sonqq() 是 sonqq

	return 0;
}

  

转载于:https://www.cnblogs.com/hertzz/p/7602630.html

C++中,静态类动态类型的概念和区别与其他编程语言似。 静态类是指在编译期就可以确定的变量类型,变量的类型在编译时就已经确定,编译器会对变量类型进行检查,如果类型匹配会报错。C++中的变量类型可以使用关键字来指定,例如int、float、double等。 动态类型是指在运行期才能确定的变量类型,变量的类型在编译时不会进行检查,而是在运行时根据实际情况来确定变量类型C++中通过使用指针或引用来实现动态类型,可以将指向派生的指针或引用赋值给指向基的指针或引用,实现多态。 下面是一个使用静态类动态类型的例子: ``` #include <iostream> using namespace std; class A { public: void func() { cout << "A::func()" << endl; } }; class B : public A { public: void func() { cout << "B::func()" << endl; } }; int main() { A a; // 静态类为A B b; // 静态类为B A* pa = &a; // 静态类为A,动态类型为A pa->func(); // 输出 "A::func()" pa = &b; // 静态类为A,动态类型为B pa->func(); // 输出 "B::func()" return 0; } ``` 在上面的代码中,A和B是两个,B是从A派生而来的。在main函数中,首先定义了一个静态类为A的对象a和一个静态类为B的对象b。然后定义了一个指向A的指针pa,并将其指向a,此时pa的动态类型也是A。调用pa的func函数,输出"A::func()"。 接着将pa指向b,此时pa的动态类型变为B。再次调用pa的func函数,输出"B::func()"。可以看到,通过使用动态类型,可以实现不同对象的动态绑定,实现多态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值