一、

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 #include<iostream>
5 using namespace std;
6 class A
7 {
8 public:
9 int a,b;
10 A();
11 A(int x,int y);
12 ~A();
13 };
14 A::A()
15 {
16 printf("调用A类构造函数\n");
17 }
18 A::A(int x,int y)
19 {
20 a=x;
21 b=y;
22 printf("调用A类构造函数\n");
23 }
24 A::~A()
25 {
26 printf("调用A类析构函数\n");
27 }
28 class B:public A
29 {
30 public:
31 int aa,bb;
32 B()
33 {
34 printf("调用B类构造函数\n");
35 }
36 B(int x,int y)
37 {
38 aa=x;
39 bb=y;
40 printf("调用B类构造函数\n");
41 }
42 ~B()
43 {
44 printf("调用B类析构函数\n");
45 }
46 };
47 class C:public B
48 {
49 public:
50 int aaa,bbb;
51 B one;
52 C(int x,int y)
53 {
54 aaa=x;
55 bbb=y;
56 one.aa=x;
57 one.bb=y;
58 printf("调用C类构造函数\n");
59 }
60 ~C()
61 {
62 printf("调用C类析构函数\n");
63 }
64 };
65 int main()
66 {
67 C first(0,0);
68 printf("%d %d %d %d\n",first.aaa,first.bbb,first.one.aa,first.one.bb);
69 return 0;
70 }

二、

  1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 #include<iostream>
5 using namespace std;
6 class Base
7 {
8 public:
9 Base(int x,int y)
10 {
11 a=x;
12 b=y;
13 }
14 virtual void show() //声明了虚函数,那么指针指向哪个对象就用那个对象的函数
15 { //否则的话,声明指针是什么类型就会用那个类型的函数
16 cout<<"基类内容show打印"<<endl;
17 cout<<"a:"<<a<<"b:"<<b<<endl;
18 }
19 void prinf()
20 {
21 cout<<"基类内容prinf打印"<<endl;
22 cout<<"a:"<<a<<"b:"<<b<<endl;
23 }
24 private:
25 int a,b;
26
27 };
28 class One:public Base
29 {
30 public:
31
32 One(int x,int y):Base(x,y)
33 {
34 aa=x;
35 bb=y;
36 }
37 void show()
38 {
39 cout<<"派生类内容show打印"<<endl;
40 cout<<"aa:"<<aa<<"bb:"<<bb<<endl;
41 }
42 void prinf()
43 {
44 cout<<"派生类内容prinf打印"<<endl;
45 cout<<"aa:"<<aa<<"bb:"<<bb<<endl;
46 }
47 private:
48 int aa,bb;
49 };
50 int main()
51 {
52 Base mb(100,200),*pc;
53 One mc(200,300);
54 pc=&mc;
55 pc->show();
56 pc->prinf();
57 pc=&mb;
58 pc->show();
59 pc->prinf();
60 return 0;
61 }
62
63 //2、
64 #include<stdio.h>
65 #include<string.h>
66 #include<algorithm>
67 #include<iostream>
68 using namespace std;
69 class Shape //抽象类定义是只要里面有一个纯虚函数那他就是抽象类,
70 { //抽象类不需要什么关键字来定义,且它的派生类必须覆盖重写他的纯虚方法
71 public :
72 double a;
73 Shape(double x)
74 {
75 a=x;
76 }
77 virtual void area()=0;
78 virtual void show()=0;
79 };
80 class Circle:public Shape
81 {
82 public:
83 Circle(double x):Shape(x)
84 {
85
86 }
87 void area()
88 {
89 cout<<"the circle area is :"<<endl;
90 cout<<3.14*a*a<<endl;
91 }
92 void show()
93 {
94 cout<<"a:"<<a<<endl;
95 }
96 };
97 int main()
98 {
99 Shape *ptr;
100 Circle r(6);
101 ptr=&r;
102 ptr->area();
103 ptr->show();
104 return 0;
105 }
106
107 //3、
108 #include<stdio.h>
109 #include<string.h>
110 #include<algorithm>
111 #include<iostream>
112 #include<typeinfo>
113 using namespace std;
114 class Sqare
115 {
116 public :
117 double a;
118 Sqare(double x)
119 {
120 a=x;
121 }
122 };
123 class Circle
124 {
125 public :
126 double a;
127 Circle(double x)
128 {
129 a=x;
130 }
131 };
132 int main()
133 {
134 Sqare one(1);
135 Circle two(2);
136 if(typeid(one)==typeid(Sqare)) //判断对象类型
137 {
138 cout<<"它是Sqare对象"<<endl;
139 }
140 else
141 {
142 cout<<"它是Circle对象"<<endl;
143 }
144
145 if(typeid(two)==typeid(Sqare))
146 {
147 cout<<"它是Sqare对象"<<endl;
148 }
149 else
150 {
151 cout<<"它是Circle对象"<<endl;
152 }
153 return 0;
154 }

c++派生类中构造函数和析构函数执行顺序、判断对象类型、抽象类、虚函数的更多相关文章

  1. C++学习笔记(6)----基类和派生类的构造函数和析构函数的执行顺序

    基类和派生类:构造函数和析构函数的执行顺序 在Visual Studio中,新建控制台工程,构造类如下: #include<iostream> using namespace std; c ...

  2. C++:派生类的构造函数和析构函数

    4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类 ...

  3. C++学习之路—继承与派生(二):派生类的构造函数与析构函数

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 由于基类的构造函数和析构函数是不能被继承的,所以 ...

  4. C++:派生类的构造函数和析构函数的调用顺序

    一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: • 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. • 改造基类函数:在 ...

  5. 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)

    [源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...

  6. cc28c_demo.cpp,派生类的构造函数和析构函数-代码示范3

    cc28c_demo.cpp,派生类的构造函数和析构函数-代码示范3 //派生类的构造函数和析构函数//派生类的构造函数(执行步骤)//--执行基类的构造函数//--执行成员对象的构造函数//--执行 ...

  7. c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]

    说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...

  8. c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)

    測试源代码: //測试派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace ...

  9. C++-理解构造函数、析构函数执行顺序

    先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...

随机推荐

  1. 【Oracle】常见等待事件处理

    1.查看数据库中需要关注的等待事件: select sw.seq#,sw.sid||','||s.serial# sids,s.username,sw.event,sw.P1,sw.p2,sw.p3, ...

  2. Jenkins自动部署spring boot

    Jenkins自动部署spring boot 背景介绍 本公司属于微小型企业,初期业务量不高,所有程序都写在一个maven项目里面,不过是多模块开发. 分了login模块,service模块,cms模 ...

  3. C#使用struct直接转换下位机数据

    编写上位机与下位机通信的时候,涉及到协议的转换,比较多会使用到二进制.传统的方法,是将数据整体获取到byte数组中,然后逐字节对数据进行解析.这样操作工作量比较大,对于较长数据段更容易计算位置出错. ...

  4. LuoguP5488 差分与前缀和

    题意 给定一个长为\(n\)的序列\(a\),求出其\(k\)阶差分或前缀和.结果的每一项都需要对\(1004535809\)取模. 打表找规律 先看前缀和,设\(n=5\),\(k=4\),按照阶从 ...

  5. 入门OJ:扫雪

    扫雪1 题目描述 大雪履盖了整个城市,市政府要求冬季服务部门尽快将一些街道(列在一份清单中)的积雪清除掉以恢复交通,整个城市由许多交叉路口和街道构成,当然任意两个交叉路口都是直接或间接连通的,清单给出 ...

  6. Java 迭代器的使用 Iterator

    Java的集合类可以使用for ... each循环 List Set Queue Deque 我们以List为例 其实一个java编译器并不知道如何遍历一个List 编译器只是把一个for ... ...

  7. CoeMonkey少儿编程第4章 变量

    点击这里,现在就开启CodeMonkey的趣味编程之旅. 目标 了解什么是变量 了解变量的命名规则 掌握如何使用变量 变量 什么是变量?顾名思义,变量就是可以变化的量. 和变量相对的是常量,即不可变化 ...

  8. 前端面试之JavaScript中this的指向【待完善!】

    JavaScript中this的指向问题! 另一个特殊的对象是 this,它在标准函数和箭头函数中有不同的行为. 在标准函数中, this 引用的是把函数当成方法调用的上下文对象,这时候通常称其为 t ...

  9. Angular入门到精通系列教程(14)- Angular 编译打包 & Docker发布

    目录 1. 概要 2. 编译打包 2.1. 基本打包命令 2.2. 打包部署到二级目录 3. Angular站点的发布 3.1. web服务器发布 3.2. 使用docker发布 4. 总结 环境: ...

  10. 长连接开发踩坑之netty OOM问题排查实践

    https://mp.weixin.qq.com/s/jbXs7spUCbseMX-Vf43lPw 原创: 林健  51NB技术  2018-07-13