c++
dxd_123456
学生
展开
-
c到c++的过渡
c++对c的加强 1、命名空间 一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。命名空间将全局作用域分成不同的部分 不同命名空间中的标识符可以同名而不会发生冲突 命名原创 2017-09-13 20:41:44 · 294 阅读 · 0 评论 -
类模板中的static关键字
从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个static数据成员 和非模板类的static数据成员一样,模板类的static数据成员也应该在文件范围定义和初始化 每个模板类有自己的类模板的static数据成员副本 下面这个案例可以看出他的一些特性。#include <iostream>template <typename T>class A{public:原创 2017-09-28 16:29:18 · 230 阅读 · 0 评论 -
多态原理
1、多态原理的实现 我们知道多态实现的三个条件:1.继承,2.虚函数重写,3.父类指针或引用指向子类对象 当类中有一个函数是虚函数,会在类中增加一个 虚函数指针,虚函数指针会指向一个虚函数表; 虚函数表是一个存储类成员函数指针的数据结构; 虚函数表是由编译器自动生成与维护的; virtual成员函数会被编译器放入虚函数表中; 存在虚函数时,每个对象中都有一个指向虚函数表的指针(vptr)void原创 2017-09-28 16:24:12 · 299 阅读 · 0 评论 -
构造函数拓展
1、默认构造函数 如果类中没有定义任何构造函数,编译器会自动生成一个无参构造函数,没有做任何事情, 如果写了构造函数,编译器将不再提供默认的无参构造函数,如果还还想进行无参构造,需要显示定义无参构造函数 如果没有定义拷贝构造函数,编译器会自动生成一个拷贝构造函数,会做普通类型数据的复制。 还会生成一个默认的 析构函数。class Test7_2{ Test7_2() {} T原创 2017-09-18 16:52:14 · 800 阅读 · 0 评论 -
深拷贝与浅拷贝
深拷贝和浅拷贝 浅拷贝:在拷贝指针的时候只是拷贝了地址,不会进行空间的复制class Test8_1{public: Test8_1(int id, char *name) { m_id = id; m_name = (char *)malloc(sizeof(char)* 20); strcpy(m_name, name);原创 2017-09-18 16:53:43 · 332 阅读 · 0 评论 -
拷贝构造
前文中提及到了拷贝构造,本文将进行详细探讨。 拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调原创 2017-09-18 15:07:40 · 414 阅读 · 0 评论 -
构造函数和析构函数
1、构造函数 C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数。构造函数用来对类的成员变量进行初始化,没有返回值,构造函数在定义对象的时候自动调用,一般情况下,不需要手动调用。 class Test..Test() // 无参构造 { m_a = 1; m_b = 2;原创 2017-09-18 11:20:52 · 389 阅读 · 0 评论 -
c语言到c++过渡2
本文接上文所讲,对c语言到c++间的过渡做一个归纳1、函数参数问题 首先是函数的参数问题,c语言中函数可以没有返回参数类型,函数参数可以没有数据类型,没有参数的函数可以接收任意个参数,这样是不太好的,而在c++中,没有参数的函数就被看做是无参函数,不能给函数传参,而且在c++中函数参数必须要有类型。2、新增bool类型关键字 C++在C语言的基本类型系统之上增加了bool,C++中的原创 2017-09-16 20:58:10 · 474 阅读 · 0 评论 -
继承的访问控制
1、单个类的访问控制 单个类的访问控制我们都是知道的,而且在之前的课程中也讲过了: public 修饰的成员变量 方法 在类的内部 类的外部都能使用。 protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ;其他 类的外部不能被使用。 private: 修饰的成员变量方法 只能在类的内部使用 不能在类的外部。 2、继承权限 不同的继承方式会影响基类成员在派生类中原创 2017-09-22 20:57:24 · 410 阅读 · 0 评论 -
继承的概念
1、在讲继承之前先将一些类之间的几种关系 1)包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。 2)一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。 3)机制称为“继承”。关系具有传递性,不具有对称性。 而我们今天着重要讲的就是继承。 2、继承简单介绍: 继承是面向对象软件技术当中原创 2017-09-22 20:55:29 · 375 阅读 · 0 评论 -
逻辑与和逻辑或的重载
&&和||是C++中非常特殊的操作符 ,&&和||内置实现了短路规则 ,操作符重载是靠函数重载来完成的 ,操作数作为函数参数传递 ,C++的函数参数都会被求值,无法实现短路规则 。所以一般情况下不会重载逻辑与和逻辑或。 下面就用一个案例来分析为什么不要重载逻辑或和逻辑与。#include <stdio.h>class Test8{public: Test8(int a) {原创 2017-09-22 20:54:10 · 345 阅读 · 0 评论 -
括号运算符重载
圆括号运算符()也可以重载,重载之后对象就可以使用圆括号运算符了。 括号运算符只能被重载为类的非静态成员函数,不能重载为友元函数和普通函数。 载括号运算符函数的参数个数没有限制,甚至没有参数都可以。 重载格式 类型 类 :: operator() ( 表达式表 ) ;下面用一个案例来呈现括号重载括号运算符#include <stdio.h>class Test7{public原创 2017-09-22 20:53:02 · 4860 阅读 · 0 评论 -
异常在类层次中的使用
异常在类层次中的使用即是继承在异常中的使用,这个内容可以用一个案例阐述出来 这个案例的要求是这样的: 设计一个数组类 MyArray,重载[]操作, 数组初始化时,对数组的个数进行有效检查 1)index<0 抛出异常eNegative 2)index = 0 抛出异常 eZero 3)index>1000抛出异常eTooBig 4)index<10 抛出异常eTooSmall原创 2017-09-28 16:30:13 · 237 阅读 · 0 评论