c++
michael019
这个作者很懒,什么都没留下…
展开
-
C++ 类型转换
1.static-cast(需要两者具有”一定的关系”,在基础类型和对象的转换上具有优势) 2.reinterpret-cast(最灵活,也最危险。因其是将地址传递而已,转换对象间不需要任何关系) 3.const-cast(可去const属性,其他转换不行) 4.dynamic-cast(多态的优势,可以在只有接口的情况下完成后续开发) 其中只有dynamic-cast是编译器在运行期间处理原创 2015-07-03 10:34:19 · 306 阅读 · 0 评论 -
C++——运算符重载(四)
综合实例 1.[],=,==,!= 运算符的重载应用 2.左值与右值本质 注:源码上传在博客中原创 2015-09-09 17:08:53 · 490 阅读 · 0 评论 -
构造函数综合小练习2
构造函数中调用另一个构造函数#include <iostream>using namespace std;class MyTriangle{public: MyTriangle(int a, int b, int c) { this->a = a; this->b = b; this->c = c; } MyTria原创 2015-09-04 23:21:14 · 337 阅读 · 0 评论 -
拷贝构造函数应用场景
拷贝构造函数应用场景有四种#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class Vertify{public: Vertify() { cout << "无参构造函数 " << "构造的对象地址是:" << this << endl; }原创 2015-09-04 15:10:44 · 785 阅读 · 0 评论 -
构造函数综合小练习1
知识点:1.匿名对象生命周期 2. 拷贝构造函数 3. 构造函数,析构函数的调用顺序#include "iostream"using namespace std;class Triangle{public: Triangle(int a, int b, int c) { this->a_ = a; this->b_ = b; t原创 2015-09-04 23:08:11 · 370 阅读 · 0 评论 -
初始化列表
1.为什么需要初始化列表?原因:当一个类B中的一个成员变量是另一个类A对象a时,A只有一个带参数的构造函数,而没有无参的构造函数时,由于无法完成对a的初始化。2.初始化与赋值概念区别:初始化时当前对象正在被创建,赋值表示一个对象已经创建完成。 如1:类对象初始化会调用构造函数或拷贝构造函数,而赋值是调用的却是=运算符重载函数。 如2:const关键字修饰的变量就只能在初始化时候获得数据,不可以被原创 2015-09-04 21:57:21 · 334 阅读 · 0 评论 -
C++ ——三大特性理解
1.封装 突破了C语言函数的概念,封装可以隐藏实现细节,使得代码模块化。2.继承 继承可以扩展已存在的代码模块(类);达到代码重用的目的。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。3.多态 接口重用,多态可以使用未来,即当前的框架不需改变也可以使用后来的代码。封装可以隐藏实现细节,使得代码模块化;封装是把成员变量和原创 2015-10-01 10:03:02 · 9088 阅读 · 0 评论 -
深入理解C++三大特性之一 ——多态
1.多态的实现效果 多态:同样的语句调用能呈现不一样的表现形态; 2.多态实现的三个条件 a)继承 b)virtual关键字修饰 c)父类指针指向或引用子类对象 3.多态的C++实现 通过virtual关键字,告诉C++编译器对这个函数要支持多态; 不要在编译期间根据指针类型判断如何调用;而是要根据运行期间指针所指向的实际对象类型来判断如何调用原创 2015-10-01 11:24:02 · 957 阅读 · 0 评论 -
C++——Static变量初始化
静态变量初始化1.静态变量是属于类的,需要显式向编译器申请内存,并手动初始化。 2.不能指望构造函数默认不为其分配内存及默认初始化,因为构造函数是为构造非static 成员的。#include <iostream>using namespace std;class Person{public: Person() { }public: static in原创 2015-09-30 23:21:01 · 609 阅读 · 0 评论 -
C++ 常量折叠
c 中const 常量用法 说明:c语言中const 常量可以很容易地被改变#include <stdio.h>#include <stdlib.h>void main(){ const int a = 100; printf("a的地址是:%p\na的内容是:%p\n", &a, a); int* p = (int*)&a; printf("p的地址是:%p原创 2015-09-07 17:03:54 · 467 阅读 · 0 评论 -
浅拷贝——C++编译器默认提供的赋值运算符
在类成员变量中含有指针类型时,如果没有自定义一个拷贝构造函数,程序会崩溃。 同样,如果没有自定义=运算符重载函数,也会使得程序运行时崩溃,原因都是因为编译器提供的默认的拷贝构造函数与=运算符重载函数执行的都是浅拷贝。#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class Vertify{publi原创 2015-09-04 15:24:14 · 759 阅读 · 0 评论 -
浅拷贝——C++编译器默认提供的拷贝构造函数
浅拷贝与深拷贝区别:在执行拷贝动作时,浅拷贝只会执行简单的赋值动作。遇到类成员变量是指针类型时,由于会直接将指针本身拷贝过去,导致有几个指针指向同一片内存,以致于最后在调用析构函数时会对同一片内存区域释放多次。#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class Vertify{public:原创 2015-09-04 14:37:48 · 449 阅读 · 0 评论 -
C++——运算符重载(三)
知识点: 1.友元函数 2.链式编程前面介绍了运算符重载有两种实现方法:成员函数和友元函数 一句话总结:当两种方法都能实现运算符重载时,请使用成员函数这种方式实现,忘了友元函数。 那么友元函数的出现是为了解决什么难题的? 友元函数总结 1.为什么有友元函数? 在实现类之间数据共享时,减少系统开销,提高效率。 下面两种情况需要使用友元函数:(1)运算符重载的某些特殊场合需要使用友元函数。(原创 2015-09-09 14:26:19 · 390 阅读 · 0 评论 -
c 大小端问题
背景知识: 大小端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。 计算机中的应用: 大端方式将高位存放在低地址,小端方式将低位存放在高地址。采用大端方式 进行数据存放符合人类的正常思维,而采用小端方式原创 2015-07-06 17:02:33 · 547 阅读 · 0 评论 -
cout 输出字符型指针
include using namespace std; int main() { //输出正常 char* p = “hello ,world!”; cout << p << endl;//在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串 cout << (void*)p << endl;//打印地址信息 //输出异常 cha原创 2015-07-03 14:25:34 · 722 阅读 · 0 评论 -
new 高级用法
#include <iostream>using namespace std;class Person{public: Person() { cout << "构造函数" << endl;; } ~Person() { cout << "析构函数" << endl; }};int main(){ int原创 2015-07-03 15:25:50 · 357 阅读 · 0 评论 -
类或函数包装器
#include <iostream>using namespace std;template <typename T1,typename T2>T1 volume(T1 t1, T2 t2) //包装器,实现一个操作接口,操作多个类的方法{ return t2(t1);//T2若是类,则类需要重载操作符()}int area(int num){ return num *原创 2015-07-03 17:31:59 · 317 阅读 · 0 评论 -
c/c++混合编程
背景: 1.C++之父在设计C++之时,当时已经存在了大量优秀的C代码,为了支持C以及利用现成的C库,需要在C++中尽可能多的支持C,extern “C”就是其中的策略之一。 2.C++程序中经常需要调用底层的库函数,而底层驱动大多使用的是C语言开发的。 3.C编译器与C++编译器对函数的处理不同。C++中支持函数的重载功能, 例如:void add(int,int);C编译器可能处理成类似原创 2015-07-13 09:23:31 · 344 阅读 · 0 评论 -
c++ 多态
#include <iostream> #include <string> using namespace std;class Grandpa{protected: int age_;public: Grandpa(int age = 100) { age_ = age; cout << "对象Grandpa构造完成!" <<翻译 2015-07-06 11:09:54 · 350 阅读 · 0 评论 -
构造函数规则总结
构造函数种类:无参构造函数,有参构造函数,拷贝构造函数Rule No1:当类没有提供任何构造函数时,编译器会提供哪些构造函数?答案是无参构造函数与拷贝构造函数。验证如下:#include <iostream>using namespace std;class Vertify{ };int main(){ Vertify ver;//调用编译器提供的默认无参构造函数 V原创 2015-09-04 13:59:54 · 432 阅读 · 0 评论 -
C++——运算符重载(二)
友元函数实现复数加法#include <iostream>using namespace std;class Complex{public: Complex() { } Complex(int real,int imag) { this->real_ = real; this->imag_ = imag; }原创 2015-09-09 09:45:11 · 337 阅读 · 0 评论 -
C++——运算符重载(一),入门篇
1.运算符重载的必要性 2.全局函数实现运算符重载#include <iostream>using namespace std;class Complex{public: Complex() { } Complex(int real,int imag) { this->real_ = real; this->imag_ =原创 2015-09-09 09:08:03 · 336 阅读 · 0 评论 -
Item 36——区分接口继承和实现继承
(公有)继承的概念看起来很简单,进一步分析,会发现它由两个可分的部分组成:函数接口的继承和函数实现的继承。这两种继承类型的区别和函数声明和函数定义间的区别是完全一致的。class Shape { public: virtual void draw() const = 0;//使派生类仅仅只是继承函数的接口(声明),需要提供自己版本的函数定义virtual void error(const s原创 2016-01-20 14:56:37 · 388 阅读 · 0 评论