C++ 类 & 对象 技术教程文章

C++ 对象的构造【代码】

在类里面成员函数的初始值是多少了?(取决于创建对象的位置,是在堆、栈、还是在静态存储区中创建。)例如:#include <stdio.h>class Test {private:int i;int j;public :int get_i(void) {return i;}int get_j(void) {return j;} };Test Ta;//在静态存储区中定义 Test类int main(int argc, char *argv[]) {printf("Ta.i = %d\n",Ta.get_i());//Ta.i = 0printf("Ta.j = %d\n",Ta.get_j());//Ta.j = 0Test Tb;//在栈上定义类...

c++学习笔记(2)类的声名与实现的分离及内联函数【代码】

一、类的声名与实现的分离:和c函数声明与实现分离类似有.h : 类的声明 .cpp : 类的实现在在一个类的cpp中应该包含本类的.h文件在cpp中类的使用:例: 1//Circle类2//Circle.h 3class Circle{4private:5double radious;6public:7 Circle();8};9//Circle.pp10#include “Circle.h” 11Circle::Circle(){ 12 Radius=1; 13 }在主函数中使用此类只需要在头文件中包含.h的名字即可。二、内联函数 直接定义在类里面是内联函数,在c...

C++ 对象的内存布局

陈皓http://blog.csdn.net/haoel 点击这里查看下篇>>>前言 07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机理上的问题,也是为了图一些表达上方便和简单。不想,这篇文章成为了打开...

C++——对象的初始化和清理【代码】

对象的初始化和清理生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全C++中的面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。1 构造函数和析构函数对象的初始化和清理也是两个非常重要的安全问题? 一个对象或者变量没有初始状态,对其使用后果是未知? 同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题c++利用了构造函数和析构函...

全面深入介绍C++字符串:string类

http://blog.csdn.net/liuliming3000/article/details/18093851 从C到C++ string类2 string类的构造函数3 string类的字符操作4 string的特性描述5 string类的输入输出操作6 string的赋值7 string的连接8 string的比较9 string类的查找函数10 string类的替换函数11 string类的插入函数12 string类的删除函数13 string类的迭代器处理:14 最简单的string类实现 1 从C到C++ string类C语言的字符串函数,简单而高效。C++ string类,功...

C++map类型 之 简单介绍【图】

一:map的前世今生 (1)从关联容器与顺序容器说起。关联容器通过键(key)存储和读取元素。而顺序容器则通过元素在容器中的位置顺序存储和訪问元素(vector,queue,stack,list等)。 关联容器(Associative containers)支持通过键来高效地查找和读取元素。两个主要的关联容器类型是 map 和 set。 当中map 的元素以键-值(key-value)对的形式组织:键用作元素在 map 中的索引,而值则表示所存储和读取的数据。set 仅包括一个键。...

C++笔记十二:C++对C的扩展——struct关键字类型增强

C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。 C++中的struct是一个新类型的定义声明。 struct Student{char name[100];int age;};void main(){Student s1={"wang",1};Student s2={"wang",2};} 上面程序我们用.c文件,编译报错。这个时候c编译器不认为Student是一种新的类型,我们必须在Student前面加上struct关键字! struct Student{char name[100];int age;};void main(){struct Student s1={"wang",...

C++类禁止copy构造函数和copy assign操作符【代码】

C++类禁止copy构造函数和copy assign操作符在C++类中,编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。注意,这些编译器产生出来的函数都是public的,为了阻止这些函数被创建出来,我们可以把它们声明为private,这样就阻止了编译器暗自创建其对应版本函数。class Node { public: Node(int _data = 0) : data(_data) {} int get() const { return data; } void set(int _d...

Effective c++(笔记)之继承关系与面向对象设计

1.公有继承(public inheritance) 意味着"是一种"(isa)的关系解析:一定要深刻理解这句话的含义,不要认为这大家都知道,本来我也这样认为,当我看完这章后,就不这样认为了。公有继承可以这样理解,如果令class D以public 的形式继承了class B ,那么可以这样认为,每一个类型为D的对象同时也可以认为是类型为B的对象,但反过来是不成立的,对象D是更特殊化更具体的的概念,而B是更一般化的概念,每一件事情只要能够施行于基类对象...

C++开发必看 四种强制类型转换的总结

C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:   TYPE b = (TYPE)a  C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。   const_cast,字面上理解就是去const属性。  static_cast,命名上理解是静态类型转换。如int转换成char。  dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。  reinterpreter_cast,仅仅重新解释类型,但没有进行二进制的转换。  ...

C++可继承的单例基类模板【代码】

目录一、介绍二、代码三、关键处四、使用限制五、参考资料一、介绍最近在写一个项目,其中用到好几个单例,类本身的设计不是很复杂,但是如果每个都写一遍单例又觉得有点冗余;所以查资料写了一个单例基类模板,只要一个类继承这个基类并且以自身作为模板参数就可以实现一个单例;关于单例本身的介绍在这里不重点介绍。 特点:RAII,使用 std::shared_ptr来管理资源线程安全,加了锁以上特性基于C++11二、代码// bridf: a singleto...

面向对象程序设计-C++_课时17函数重载和默认参数【代码】

函数重载,区别一是参数类型不同,二是参数个数不同。默认参数可以多于1个,但必须放在参数序列的后部。 尽量不要用默认参数,会影响阅读 error C2668: “f”: 对重载函数的调用不明确 1 #include <iostream>2usingnamespace std;3 4void f(int i, int j = 0)//默认参数 5{6 std::cout << i << "" << j << std::endl;7}8 9//error C2668: “f”: 对重载函数的调用不明确1011void f(int i)//默认参数12{ 13 std::cout << i...

【C++】深度探索C++对象模型读书笔记--执行期语意学(Runtime Semantics)【代码】

对象的构造和析构:  全局对象  C++程序中所有的global objects都被放置在程序的data segment中。如果显式指定给它一个值,此object将以此值为初值。否则object所配置到的内容为0。  如果全局对象如果有构造函数或析构函数的话,我们说它需要静态的初始化操作和内存释放操作。编译器的执行步骤如下:  1.为每一个需要静态初始化的文件产生一个_sti()函数,内含必要的构造函数调用操作。  2. 在每一个需要静态的内存释放操...

第十五周oj刷题—— Problem C: 矩形类中运算符重载【C++】【图】

Description定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数、输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数。要求使用提示中给出的测试函数并不得改动。两个矩形相加的规则是:决定矩形的对应坐标分别相加,如左下角(1,2),右上角(3,4)的矩形,与左下角(2,3),右上角(4,5)的矩形相加,得到的矩形是左下角(3,5),右上角(7,9)的矩形。这个规则没有几何意义,就这么定义好了。输出...

c++面向对象【图】

一、C++继承(1)继承方式public公有继承protected保护继承private私有继承只要是父类private的,就是父类自己的东西了,不管以何种方式继承,都不能继承父类的private东西。可以继承protect和public的东西。protect在父类中相当于private,只有内部成员函数可以访问,但是可以让子类继承。public继承是is a的关系,继承类对象是一种基类对象,只要用基类的对象都可以用继承类对象替代,这是面向对象的一个思想。 以下是从别人博客...

C++中将string类型转换为int, float, double类型【代码】【图】

方法一: 使用stringstreamstringstream在int或float类型转换为string类型的方法中已经介绍过, 这里也能用作将string类型转换为常用的数值类型。 #include <iostream> #include <sstream> //使用stringstream需要引入这个头文件usingnamespace std;//模板函数:将string类型变量转换为常用的数值类型(此方法具有普遍适用性) template <class Type> Type stringToNum(conststring& str) {istringstream iss(str);Type num;iss...

一目了然c++虚基类!【代码】【图】

1 #include <IOSTREAM.H> 2//基类 3class CBase 4...{ 5protected: 6int a; 7public: 8 CBase(int na) 9 ...{ 10 a=na; 11 cout<<"CBase constructor! "; 12 } 1314 ~CBase()...{cout<<"CBase deconstructor! ";} 15}; 1617//派生类1(声明CBase为虚基类) 18class CDerive1:virtualpublic CBase 19...{ 20public: 21 CDerive1(int na):CBase(na) 22 ...{ 23 ...

1. C++输入输出&基本类型【代码】

目录1.1 字符函数库 cctype1.2 指针、数组与字符串1.3 文件尾条件1.4 cin.get() 与 cin.put()1.5 实践使用1.5.3 混合输入数字、字符和字符串1.5.2 菜单雏形 (持续输入字符)1.5.3 类型不匹配1.7 枚举 enum1.7.1 作用域内枚举(C++11)1.7.2 指定枚举量底层类型字符与数字 char和int类型能自动互相转换, 注意++ch得到char类型的值, 而ch + i会得到int类型的值如果在输入时试图将char类型的值给int变量, 则会使输入失效, 无法再读取输...

C++类型转换dynamic_cast解析

C++的类型转换有四种 const_cast, reinterpret_cast, static_cast, dynamic cast这边举一个dynamic cast的小例子#include <iostream>using namespace std;class BaseClass{public :int m_iNum;virtual void foo() {}; //基类必须有虚函数。保持多态特性才能使用dynamic_cast };class DerivedClass : public BaseClass{public :char* m_szName;DerivedClass(char* str) {m_szName = new char[strlen(str) + 1];strcpy(m_szName, str...

C++类的函数成员【代码】【图】

类的基本成员函数一个类包含:构造、析构、拷贝构造、赋值构造、常对象取地址、普通对象取地址基本函数class Test { public:Test(int data = 0) :m_data(data){cout << "构造函数:" << this << endl;}~Test(){cout << "析构:" << this << endl;}Test(const Test &t){m_data = t.m_data;cout << "拷贝构造:" << this << endl;}Test operator=(const Test &t){if (this != &t){m_data = t.m_data;}cout << "赋值构造:" << this << en...