首页 > 编程语言 >C++快速入门 第三十七讲:高级强制类型转换

C++快速入门 第三十七讲:高级强制类型转换

时间:2023-08-18 15:33:05浏览次数:48  
标签:类型转换 product string printInfo Company C++ 第三十七 theName include

实例1:静态强制转换

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 class Company
 6 {
 7 public:
 8     Company(string theName,string product);
 9     virtual void printInfo();
10     
11 protected:
12     string name;
13     string product;
14 };
15 Company::Company(string theName,string product)
16 {
17     name = theName;
18     this->product = product; 
19 } 
20 void Company::printInfo()
21 {
22     cout << "这个公司的名字叫:" << name << "正在生产" << product << "\n";
23 }
24 
25 class TechCompany:public Company
26 {
27 public:
28     TechCompany(string theName,string product);
29     virtual void printInfo();
30 };
31 TechCompany::TechCompany(string theName,string product):Company(theName,product)
32 {
33 }
34 void TechCompany::printInfo()
35 {
36     cout << name << "公司大量生产了 " << product << "这款产品!\n";
37 }
38  
39 int main()
40 {
41     Company *company = new TechCompany("APPLE","Iphone");//定义TechCompany对象,Company类型 
42                                                         //指针company指向其地址
43     TechCompany *techCompany = (TechCompany*)company; //将Company类型强制转换为TechCompany类型    
44     
45     techCompany->printInfo();
46     
47     delete company;//释放内存(此处company与techCompany两个指针都指向TechCompany定义的对象) 
48                    //所以释放内存只需要释放一次即可 
49     company = NULL;
50     techCompany = NULL;
51     
52     return 0;
53 }

实例2:动态强制转换

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 class Company
 6 {
 7 public:
 8     Company(string theName,string product);
 9     virtual void printInfo();
10     
11 protected:
12     string name;
13     string product;
14 };
15 Company::Company(string theName,string product)
16 {
17     name = theName;
18     this->product = product; 
19 } 
20 void Company::printInfo()
21 {
22     cout << "这个公司的名字叫:" << name << "正在生产" << product << "\n";
23 }
24 
25 class TechCompany:public Company
26 {
27 public:
28     TechCompany(string theName,string product);
29     virtual void printInfo();
30 };
31 TechCompany::TechCompany(string theName,string product):Company(theName,product)
32 {
33 }
34 void TechCompany::printInfo()
35 {
36     cout << name << "公司大量生产了 " << product << "这款产品!\n";
37 }
38  
39 int main()
40 {
41     Company *company = new Company("APPLE","Iphone");//定义Company对象, 
42                                                         //指针company类型为Company,指向其地址
43     TechCompany *techCompany = dynamic_cast<TechCompany*>(company); //将Company类型强制转换为TechCompany类型    
44     
45     if(techCompany != NULL)
46     {
47         cout << "成功!\n"; 
48     }
49     else
50     {
51         cout << "悲催!\n";
52     }
53     delete company;//释放内存(此处company与techCompany两个指针都指向TechCompany定义的对象) 
54                    //所以释放内存只需要释放一次即可 
55     company = NULL;
56     techCompany = NULL;
57     
58     return 0;
59 }

标签:类型转换,product,string,printInfo,Company,C++,第三十七,theName,include
From: https://www.cnblogs.com/ybqjymy/p/17640647.html

相关文章

  • C++快速入门 第二十七讲:运算符左移<<重载
    一般来说,在调用operator<<()重载函数时,传递给它的是哪一个流,它返回的就应该是那个流的一个引用。实例:左移操作符重载1#include<iostream>2#include<string>3#include<math.h>45usingnamespacestd;6classRational//定义基类7{8public:......
  • C++快速入门 第二十八讲:多继承(multiple inheritance)
    1多继承语法:23//助教类既继承于老师类,又继承于学生类4classAssistant:publicTeacher,publicStudent5{6};78当遇到的问题无法只用一个“是一个”关系来描述的时候,就是多继承出场的时候。例即是学生,又是人,还是助教。910#include<iostre......
  • C++快速入门 第三十讲:错误处理和调试
    程序出错可以分为两大类:编译时出错(complie-timeerror)和运行时错误(run-timeerror)suggest1:培养并保持一种编程风格suggest2:认真对待编译器给出的错误/警告信息suggest3:写代码三思而后行(先画流程图)suggest4:注意检查最基本的语法suggest5:把可能有问题的代码行注释suggest......
  • C++快速入门 第二十九讲:虚继承
    通过虚继承某个基类,就是在告诉编译器:从当前这个类再派生出来的子类只能拥有那个基类的一个实例。虚继承的语法:1classTeacher:virtualpublicPerson23{45}这样做的话便可以让Student和Teacher类都虚继承自Person类,编译器将确保从Student和Teacher类再派生出来的子......
  • C++快速入门 第三十一讲:错误处理与调试2
    让函数返回错误代码实例:范围限制1#include<iostream>2#include<climits>34usingnamespacestd;5classFactorial6{7public:8Factorial(unsignedshortnum);9unsignedlonggetFactorial();10boolinRange();1112private......
  • C++快速入门 第三十二讲:assert函数和捕获异常
    C语言和C++都有一个专门为调试而准备的工具函数---assert函数。这个函数是在assert.h库文件里定义的。实例1:assert函数应用1#include<cassert>2//assert()函数需要有一个参数,它将测试这个输入参数的真或者假状态3//如果为真Donothing4//如果为假Dosomething......
  • C++快速入门 第十八讲:访问控制
    访问控制:C++提供用来保护(保护意思是对谁可以调用某个方法和访问某一个属性加上一个限制)类里的方法和属性的手段实例1:访问级别应用1//级别允许谁来访问2//public任何代码3//protected这个类本身和它的子类4//private只有......
  • C++无法将类的成员函数赋值给一般的函数指针,解决方案
    遇到需要绑定回调函数的API接口。看了定义的函数指针,是静态的函数指针,将非静态的类成员函数赋值过去的时候,无法编译通过。将成员函数改成静态又得将整个类的内容都改成静态。这种情况下,可以构造匿名函数,引用this,这样可以在类中,将自己的成员函数赋值给需要的函数指针类型上:ser......
  • C++快速入门 第六讲:函数的重载
    函数重载:实质就是用同样的名字再定义一个有着不同参数类型及个数来实现不同操作的函数。实例1:改变同一函数的输入参数类型1#include<iostream>23voidconvertTemperature(doubletempIn,chartypeIn);4voidconvertTemperature(inttempIn,chartypeIn);5......
  • C++快速入门 第七讲:复杂的数据类型
    数组:可以把许多个同类型的值存储在同一变量名下实例1:输入的数据存储到数组中,并计算其和与平均值输出1#include<iostream>23usingnamespacestd;//使用作用域45intmain()6{7intarray[10];8inti;9intsum=0;10doubleaverage;......