CPP派生类构造过程及CPP文件易错点

简介: 一、案例代码及运行效果 // Class_Construct_Seq.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include iostream> #include string> using namesp...

一、案例代码及运行效果


  1. // Class_Construct_Seq.cpp : 定义控制台应用程序的入口点。
  2. //

  3. #include "stdafx.h"
  4. #include iostream>
  5. #include string>
  6. using namespace std; /* 没有std命名空间,cout,endl被标识为未声明 */

  7. class GrandPa
  8. {
  9.     public:
  10.         /* 注意!如果构造函数GrandPa不放在public区域,会被当成private成员 */
  11.         GrandPa(char* s)
  12.         //GrandPa(string s)
  13.         {
  14.             cout"I'm GrandPa,Created Successfully!"endl;
  15.             coutsendlendl;
  16.         };
  17.         void DelegateShowText()
  18.         {
  19.             ShowText();
  20.         }

  21.     private:
  22.         void ShowText()
  23.         {
  24.             cout"Print in GrandPa"endl;
  25.         }
  26. }; /* 注意,类的声明后面还有一个分号*/

  27. class Son
  28. {
  29.     public:
  30.         Son()
  31.         {
  32.             cout"I'm Son,Created Successfully!"endlendl;
  33.         }

  34.         void ShowText()
  35.         {
  36.             cout"Print in Son"endl;
  37.         }
  38. };

  39. //注意!多继承与父类的构造函数初始化都是使用逗号分开
  40. class GrandSon : public GrandPa,public Son
  41. {
  42.     public:
  43.         GrandSon():GrandPa("Vaule from GrandSon"),Son()
  44.         {
  45.             cout"I'm GrandSon,Created Successfully!"endlendl;
  46.         }

  47.         void ShowText()
  48.         {
  49.             cout"Print in GrandSon"endl;
  50.         }
  51. };

  52. enum
  53. {
  54.     GRANDPA = 1,
  55.     SON,
  56.     GRANDSON,
  57. };

  58. int main()
  59. {
  60.     cout"-------------------------------------------------------"endl;
  61.     cout"Select to create:"endl;
  62.     cout"1 GrandPa ;"endl;
  63.     cout"2 Son ;"endl;
  64.     cout"3 GrandSon ;"endl;
  65.     cout"-------------------------------------------------------"endl;

  66.     int value = 0;
  67.     cin >> value;

  68.     GrandPa gPa("Value in GrandPa");
  69.     Son s;
  70.     GrandSon gSon;

  71.     switch(value)
  72.     {
  73.         case GRANDPA:
  74.             //gPa.ShowText(); 错误的用法,在main中调用GrandPa的私有成员,不允许!!
  75.             gPa.DelegateShowText(); // 但可调用GrandPa的公有成员
  76.             getchar();
  77.             break;

  78.         case SON:
  79.             s.ShowText();
  80.             getchar();
  81.             break;

  82.         case GRANDSON:
  83.             gSon.ShowText();
  84.             getchar();
  85.             break;

  86.         default:
  87.             break;
  88.     }

  89.     getchar(); /* 用于屏幕输出暂停 */
  90.     return 0;
  91. }

 

输出效果

grandson

图 派生类构造的过程

由上图,派生类的构造过程是先构造完基类,才进行自己构造。

 

二、代码与理论分析


上述CPP代码有几个注意点:


1、using namespace std;  /* std命名空间,包含cout,endl的声明,必须写 */

2、class GrandPa{……};  ===>这里一定要有一个逗号

3、 注意!如果构造函数GrandPa不放在public区域,会被当成private成员
class GrandPa
{
    public:
               GrandPa(char* s)

……

}

4、多继承与派生类构造函数写法

(1)注意!多继承写法,父类间用逗号分开

class GrandSon : public GrandPa,public Son{};

(2)注意!派生类的构造函数需要依此给父类的构造函数传值(针对有参数的基类构造函数,没有参数的基类构造函数可以不写)

public:
        GrandSon():GrandPa("Vaule from GrandSon"),Son()
        {
            cout        }

5、CPP枚举类型的写法:内部有逗号分开,结尾用分号

enum
{
    GRANDPA = 1,
    SON,
    GRANDSON,
};

6、不能通过main()调用GrandPa的私有方法,但可以调用其公有方法

             //gPa.ShowText();  错误的用法,在main中调用GrandPa的私有成员,不允许!!
            gPa.DelegateShowText();   // 但可调用GrandPa的公有成员

7、getchar(); 用于控制台的暂停

8、CPP输出字符串的方法

  1. GrandPa(char* s)
  2.         //GrandPa(string s)
  3.         {
  4.             cout"I'm GrandPa,Created Successfully!"endl;
  5.             coutsendlendl;
  6.         };


相关文章
|
Linux
一个进程最多可以创建多少个线程基本分析
一个进程最多可以创建多少个线程基本分析
634 1
|
算法 程序员 C语言
C/C++原子操作与atomic CAS底层实现原理
假定有两个操作A 和B,如果从执行A 的线程来看,当另一个线程执行B 时,要么将B 全部执行完,要么完全不执行B,那么A 和B 对彼此来说是原子的。
991 1
C/C++原子操作与atomic CAS底层实现原理
|
存储 设计模式 算法
【C++ 并发 线程池设计】深入理解C++线程池:设计、实现与应用
【C++ 并发 线程池设计】深入理解C++线程池:设计、实现与应用
921 0
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
23974 64
图解一致性哈希算法,看这一篇就够了!
|
Devops Shell 数据中心
Docker容器迁移到其他服务器的5种方法
迁移在许多情况下都是不可避免的。硬件升级、数据中心变化、过时的操作系统,所有这些都可能成为迁移的触发点。
16651 3
|
存储 算法 搜索推荐
常用的外部排序方法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81158566 定义问题       外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。
1966 0
|
虚拟化 Docker 容器
2015年容器技术峰会学习笔记(二)
本文讲的是2015年容器技术峰会学习笔记(二),【编者的话】这是2015容器技术峰会学习笔记的第二篇,在这里,作者继续讲述有关容器的诸多轶事,华尔街之狼? 开源巨头? 初创团队? 让我们一起去看看他们是怎么玩的容器的吧!
1671 0
打印楼梯,同时在楼梯上方打印两个笑脸
题目:打印楼梯,同时在楼梯上方打印两个笑脸。 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。2.程序源代码: 1 #include 2 int main() 3 { int i,j; 4 printf("\1\1\n"); //打印两个笑...
936 0
|
4天前
|
人工智能 运维 安全