关于C语言中的typedef struct 用法的用法问题,编译器是VC 6.0

多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果

  1. 父类引用变量指向子类对象

封装:封装的意义在于保护或者防止代码(数据)被我们无意中破坏。

继承:继承主要实现重用代码,节省开发时间

// 面向对象的五大基本原则
单一职责原则(SRP)
开放封闭原则(OCP)
里氏替换原则(LSP)
依赖倒置原则(DIP)
接口隔离原则(ISP)

C中:如果函数未指定返回值类型,则默认为int
c++中:如果一个函数没有返回值,返回值类型必须指定为void
C中:如果函数没有指定参数列表,则默认可以接受任意多个参数
C++中:有严格的类型检测,没有参数列表的函数默认为void,不接受任意参数
三、缺省参数(即给参数一个默认值)
C++:支持(如果没有指定实参则使用缺省值,有则使用指定实参)
1.默认实参必须在参数列表的结尾
2.默认参数只能出现在函数声明或者定义二选一中
3.缺省值必须是常量或全局变量
4.缺省参数必须是值传递或者常参传递
C++:支持在同一作用域中存在几个功能类似的同名函数,但参数列表(参数个数、类型、顺序)不同
引用:可以看做是一个变量的别名
2.一个变量可以有多个引用
3.引用一旦初始化,就不能在成为其他变量的引用
异:1.引用必须初始化
2.引用一旦绑定就不能更改
4.有多级指针,没有多级引用

// const修饰的对象为只读对象,只能调用const的成员函数,其成员变量不能直接被修改

// C++三目运算可以返回a或b的引用,可以当左值。但是其中有常量时,不能当左值

出错的原因是编译器根据字符串”hello

// 引用的实现是一个指针常量

// 内联函数省去函数调用时的压栈,跳转,和返回的开销,编译器会把该函数的代码副本放置在每个调用函数的地方
// inline只是一种请求,编译器你可以拒绝
? 1.在内联函数内不允许使用循环语句和开关语句;
? 2.内联函数的定义必须出现在内联函数第一次调用之前;
? 3.类结构中所在的类说明内部定义的函数是内联函数。

// 函数参数可以提供默认值
// 默认参数可以在定义时或者声明时指定,提供的参数在被调用时要被看见。

// static_cast:用于基本类型转换,不能用于基本类型的指针转换,用于继承关系对象的转换和类指针的转换
// const_cast:去除变量的只读属性,用于指针或引用
// dynamic_cast :用于继承关系的类指针转换,用于有交叉关系的类指针的转换,具
有类型检查功能,需要虚函数支持

11、类的成员 - 构造函数
// 构造函数的作用是对对象自动初始化
// 构造函数与类名相同,没有返回值,在对象定义时自动被调用
// 栈和堆上创建对象时,成员变量初始值为随机值
// 静态储存区和全局区上创建对象时,成员变量初始值为0
// 不能为虚函数,虚函数是为了对象的动态调用,对象都没构造,哪来的虚函数。

11、类的成员 - 初始化列表
必须在类初始化列表中初始化的几种情况:

  1. 类成员为const或引用类型

// 2.通过显式调用父类构造函数,对父类数据成员初始化

11、类的成员 - 拷贝构造函数
C++中三种情况下需要调用拷贝构造函数:

  1. 对象以值传递的方式传入函数参数
  2. 对象以值传递的方式从函数返回
  3. 一个对象用于初始化另一个对象

// 没定义构造函数时,编译器自动提供无参构造函数和拷贝构造函数(有拷贝操作时)
// 自定义构造函数的话,两个构造函数必须同时指定
// 自定义构造函数,必然需要实现深拷贝

// 拷贝构造函数必须用引用传值,也就是传址,因为传址会造成再次调用构造函数,形成死循环

// 当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象

12、类的成员 - 析构函数
// 用来销毁对象,没有参数 没有返回值 被自动调用
// 析构顺序由于全局、静态变量先于局部变量构造,首先析构局部变量,而手动析构在 } 之前,在由于全局变量作用域大于静态变量,先于静态变量构造,所以最后析构

13、类的成员 - 临时对象
临时对象产生主要有以下三种情况:

// 值传递时会调用拷贝构造函数,并且创建临时对象;在多次继承情况下,临时对象的创建是一个很大的性能消耗,用引用传参可以避免

11、类的成员 – 虚函数和纯虚函数
// 虚函数可以被直接使用,也可以被子类重载后以多态形式调用
// 纯虚函数在子类中只有声明而没有定义,必须在子类中实现该函数,也可以在子类中重载,以多态形式被调用

14、类的成员 - 静态成员变量
// static成员变量是在类加载的时候生成
// 一般的成员变量是每个对象所自己拥有的,每次构造都会自己调用自己的成员变量

// 实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存
// static静态成员变量属于整个类所有,先于对象存在,可以类名::变量直接访问
不隶属于任何一个单独的对象
需要在类外单独分配空间

15、类的成员 - 静态成员函数

// 静态成员函数不可以直接访问成员变量
// 可以通过类名直接调用静态函数
// static静态成员变量属于整个类所有,先于对象存在,可以类名::变量直接访问

  1. 类的构造函数用于对象的初始化
  2. 构造函数与类文明相同,且没有返回值
  3. 构造函数在对象被创建时自动被调用
    1. 如何判断构造函数的执行结果?
    2. 在构造函数中执行return语句会发生什么?
    3. 构造函数执行结束意味着对象构造成功?

// 操作数函数也可以通过成员函数来完成
// 当全局函数和成员函数同时存在时 优先调用成员函数
// 二元运算符成员函数重载时, 只需要一个参数, 另一个参数由this(左操作数)指针传入

21、重载 - 赋值操作符的重载
// 当类的成员指代了外部资源,就需要重载赋值操作符来完成深拷贝

22、重载 - 数组操作符的重载
// 只能通过类的成员函数重载
// 重载函数能且仅能使用一个参数
// 可以定义不同参数的多个重载函数

// 指针的生命周期结束时主动释放堆空间
// 一片堆空间只能由一个指针标识
// 杜绝指针比较和指针运算

// 转换构造函数(有且仅有一个参数 参数是基本类型或者其他类型)

// 继承父类的成员函数中,调用的变量也来自父类,隐藏但不会覆盖,他们同时存在

c.method(); // 成员函数继承自父类 成员函数的变量也是父类的(虽然被隐藏)

28、继承 – 重定义(隐藏)

// 指在不同的作用域中,函数名相同,不能构成重写的都是重定义
// 子类的成员变量将隐藏父类中的同名成员变量
// 默认访问的是子类的成员,继承了但是不能直接访问,想访问父类用 ::分辨

// 子类的函数将隐藏父类的同名函数
// 由于再不同的作用域,子类不能重载父类的同名函数,用作用域分辨符::区分

c.add(1); // 编译不通过 子类同名函数隐藏父类,不存在重载

29、继承 – 赋值兼容
// 面向对象赋值兼容规则
1.子类对象可以赋值给父类对象
2.子类对象可以初始化父类对象
3.父类指针可以指向子类对象
4.父类引用可以引用子类对象
// 当父类指针(引用)指向子类对象时,子类对象退化成父类对象,只能访问父类中定义的成员

p = c; // 1.子类对象可以赋值给父类对象

30、继承 – 重写(覆盖 多态)
// 当在子类中定义了一个与父类完全相同的虚函数时,则称子类的这个函数重写了父类这个虚函数。
// 根据实际指针指向的对象判断调用函数
// 子类重写父类函数,必须用virtual修饰,不然没有意义。因为默认调用父类函数
// 静态联编:在程序的编译期就能确定函数的具体调用 重载
// 动态联编:在程序的执行期才能确定函数的具体调用 重写

2、泛型编程 – 单例类模板

2、泛型编程 – 函数模板
// 函数模板是一种特殊的函数,可用不同类型进行调用, 类型可被参数化

// 编译器优先选用普通函数
// 可通过空模板实参列表限定值匹配模板

// 类的部分加上了约束条件,就是模板的特化
// 类模板的特化是把一个类模板根据不同的情况分开实现

2、泛型编程 – 数组类模板
// 模板参数也可以是数值参数
// 数值参数只能是常量,不能是变量,不能是double,不能是类

// Stack是一个容器类的改编,为程序员提供了堆栈的全部功能,实现了一个先进后出(FILO)的数据结构

}

按相关度排序 按时间排序

按相关度排序 按回复数排序

全部 文档 代码类 工具类

(1)多个线程顺序创建的顺序=线程执行顺序? (2)多个线程顺序创建,回调函数执行顺序规律
线程的一些方法介绍和Object的wait notify创建线程的几种方法“你知道茴字几种写法?”孔乙己笑着说道. “你知道创建线程几种方法?”
这篇文章解决以下几个问题: 1.结构体可以被类继承 2.结构体变量中含有字符串,可以直接赋值 3.C语言中的结构体使用与C++中的使用不同的地方 4.如何重载操作符 代码:(vc6.0 win32 console application) #include "stdafx.h"
Java开发中,我们实现多线程,两种方式, 一种是继承Thread类,一种是实现Runnable接口。但是,我们真的理解Runnable?Runnable和Thread一样?都是开启新的线程? 为何
我觉得要比较容易理解Java线程池,要逐步搞懂这么几个问题。 1、Java线程池是一个放线程的池子,指的就是里面有很多个线程,池子怎么实现呢,用什么东西来表示,考虑到数据结构,跟连接池类似。 2、里面的线程是用来干什么的。 3、线程池中的线程是在什么时候创建的,哪些方式可以创建呢。 4、池中线程个数怎么设置,若是超过了怎么办,若是还没达到怎么办。
我在一个进程中,三个线程,其中有两个线程需要延时自己。 请问可以在这两个线程中均调用sleep函数实现延时功能? 其中一个线程在调用sleep的时候会被另一个线程抢占? 如果抢占了,那么计时器会不会产生冲突?
线程与进程 为什么要使用多线程/进程?线程与进程的区别?线程对比进程的优势?Java中有多进程线程的创建与启动 线程的创建有哪几种方式?它们之间什么区别? 线程的生命周期与线程控制 线程的生命周期哪几种状态?各种状态之间如何转换?线程的等待、退让、中断等
每个进程只能有一个消息队列?为什么?   每个进程只能有一个消息队列?为什么?NO.每个进程可以多个线程,每个线程都可以自己的消息队列,线程之间可以通过消息队列传递消息进行通信和同步。如:
基于vc6.0和mysql55的邮件管理系统源码

vc6.0有线程吗的相关搜索

}

我要回帖

更多关于 typedef struct 用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信