c++派生类中构造函数和析构函数执行顺序、判断对象类型、抽象类、虚函数
一、

代码:
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++派生类中构造函数和析构函数执行顺序、判断对象类型、抽象类、虚函数的更多相关文章
- C++学习笔记(6)----基类和派生类的构造函数和析构函数的执行顺序
基类和派生类:构造函数和析构函数的执行顺序 在Visual Studio中,新建控制台工程,构造类如下: #include<iostream> using namespace std; c ...
- C++:派生类的构造函数和析构函数
4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类 ...
- C++学习之路—继承与派生(二):派生类的构造函数与析构函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 由于基类的构造函数和析构函数是不能被继承的,所以 ...
- C++:派生类的构造函数和析构函数的调用顺序
一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: • 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. • 改造基类函数:在 ...
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
- cc28c_demo.cpp,派生类的构造函数和析构函数-代码示范3
cc28c_demo.cpp,派生类的构造函数和析构函数-代码示范3 //派生类的构造函数和析构函数//派生类的构造函数(执行步骤)//--执行基类的构造函数//--执行成员对象的构造函数//--执行 ...
- c++, 派生类的构造函数和析构函数 , [ 以及operator=不能被继承 or Not的探讨]
说明:文章中关于operator=实现的示例,从语法上是对的,但逻辑和习惯上都是错误的. 参见另一篇专门探究operator=的文章:<c++,operator=>http://www.c ...
- c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)
測试源代码: //測试派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace ...
- C++-理解构造函数、析构函数执行顺序
先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...
随机推荐
- 用js实现打印九九乘法表
用js在打印九九乘法表 思考 在学习了流程控制和条件判断后,我们可以利用js打印各式各样的九九乘法表 不管是打印什么样三角形九九乘法表,我们都应该找到有规律的地方,比如第一列的数字是什么规律,第一行的 ...
- 【Linux】Linux进程间通信的几种方式
一.进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 共享数据:多个进程要操作共享数据,一个进程对共享数据 信息传递:一个进程需要向另一个进程发 ...
- 【ORA】 ORA-01031:权限不足的问题
今天创建一个用户,赋予dba权限,在plsql中选择sysdba登录,但是报错 ORA-01031 在网上找了好久最后的解决办法是 不仅仅要有dba权限 还要有这个权限: grant all priv ...
- cobalt strike出现连接超时情况解决办法
服务器安装好teamserver服务后,进行连接,此时出现了连接超时的情况 检查方法: 一.检查端口是否正常开启 netstat -an | grep <设置的端口号>centos7可以用 ...
- Windows程序通用自动更新模块(C#,.NET4.5以上)
本通用自动更新模块适合所有Windows桌面程序的自动更新,不论语言,无论Winform还是wpf. 一.工作流程:1. 主程序A调起升级程序B2. B从服务器获取更新程序列表,打印更新信息.3. B ...
- Linux操作系统相关资料
玩转Linux操作系统 操作系统发展史 只有硬件没有软件的计算机系统被称之为"裸机",我们很难用"裸机"来完成计算机日常的工作(如存储和运算),所以必须用特定的 ...
- 05. struts2中为Action属性注入值
概述 struts2为Action中的属性提供了依赖注入功能 在struts2的配置文件中,我们可以很方便地为Action中的属性注入值.注意:属性必须提供get,set方法. 配置 <acti ...
- Bitter.Core系列三:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore ORM 之 示例模型创建
在具体数据库操作之前,我们先准备好四张表以及相对应数据库操作模型: 学生表,年级表,班级表,学分表.示例数据库表,如下代码(MSSQL 为例) --学生表 CREATE TABLE t_student ...
- ubuntu 14.04下安装 mysql-workbench
直接在命令行下运行下面命令: sudo apt-get install mysql-workbench 安装完,都可以在Dash中找到 "mysql" 就点击应用打开. 在data ...
- LOJ10082
题目描述 原题来自:Centrual Europe 2005 我们有N个字符串,每个字符串都是由 a 至 z 的小写英文字母组成的.如果字符串A的结尾两个字符刚好与字符串B的开头两个字符匹配,那么我们 ...