随笔分类 - 语言C++
摘要:若一个类不能定义对象而只能做基类派生新类,称该类为抽象类。 (1)若类的构造函数或析构函数的访问权限为protected,则此类为抽象类。因为只有在派生类中可调用基类的保护成员。(构造函数或析构函数为private的类没有实用价值。) (2)含有纯虚函数的类为抽象类。
        阅读全文
                
摘要:为什么要有纯虚函数 在定义基类时,有时只需要抽象出虚函数的原型,而无法定义其实现,因为其实现依赖于它的派生类。这是,可以把基类中的虚函数定义为纯虚函数。 格式:virtual <return type> FuncName(<ArgList>) = 0; 说明: (1)定义纯虚函数时,其实现不能在类内定义,但可在类外或派生类中定义,通常在派生类中定义。 (2)虚函数名赋值为0,与函数体为空不同,在未实现该函数之前,不能调用它(函数体为空的函数可以被调用)。 (3)含有纯虚函数的类是抽象类,因为虚函数没有实现部分,不能产生对象。 (4)可以定义抽象类类型的指针(或引用),以
        阅读全文
                
摘要:如果没有[],则对于一维数组只是释放第0个元素所占内存, 对于二维数组只是释放第0行内存。
        阅读全文
                
摘要:算法描述:功能:将一段数据转换为max-heap.(父节点不小于子节点的完全二叉树。)基本步骤:从某一子树开始进行下溯操作。开始的子树:Distance parent = (len - 2)/2; 最后的叶节点不必执行下溯。该子树执行完下溯后parent—;下溯:将空洞节点(这里是parent,即开始执行下溯的节点)与较大子节点对调,并持续下放,直到叶节点为止。SGI STL实现:// 以下這組 make_heap() 不允許指定「大小比較標準」。template <class RandomAccessIterator, class T, class Distance>void _
        阅读全文
                
摘要:void transfer(iterator position, iterator first, iterator last) { if (position != last) { (*(link_type((*last.node).prev))).next = position.node; (*(link_type((*first.node).prev))).next = last.node; (*(link_type((*position.node).prev))).next = first.node; link_type tmp = lin...
        阅读全文
                
摘要:iterator erase(iterator position) { link_type next_node = link_type(position.node->next); link_type prev_node = link_type(position.node->prev); prev_node->next = next_node; next_node->prev = prev_node; destroy_node(position.node); return iterator(next_node);}iterator erase(iterator...
        阅读全文
                
摘要:/*stl_list.h文件中*/iterator insert(iterator position, const T& x) {	link_type tmp = create_node(x);	tmp->next = position.node;	tmp->prev = position.node->prev;	(link_type(position.node->prev))->next = tmp;	position.node->prev = tmp;	return tmp;}void push_front(const T& x) { i
        阅读全文
                
摘要:一、 http://www.sgi.com/tech/stl/download.html 或 http://download.csdn.net/download/ljljlj/3658798 (侯捷配套源码) 已下载在G盘。 二、 linux下 /usr/include/c++/4.3 三、 已安装c++集成环境就有C++ STL源码。
        阅读全文
                
摘要:#include using namespace std;class A {public:	A() { cout using namespace std;class A {public:	A() { cout << "call A()" << endl; }	virtual ~A() { cout << "call ~A()"; }};class B:public A {	char *buf;public:	B() { buf = new char[100]; cout << "call B()&
        阅读全文
                
摘要:为什么需要虚函数 为了实现多态,即希望派生类重新定义基类的某个函数。 #include <iostream>using namespace std;class A {public:	int x;	A() { x = 1000; }	virtual void print() { cout << "A:x=" << x << endl; }};class B:public A {public:	int y;	B() { y = 2000; }	void print() { cout << "B:y="
        阅读全文
                
摘要:解决多重继承中,一个公共基类可能在派生类中产生多个拷贝的现象。 如:有一个公共基类A,类B和类C都有类A派生,类D由类B和类C派生,则类D含有类A的两个拷贝,这不仅多占内存,还可能造成多个拷贝中的数据不一致。 #include <iostream>using namespace std;class A {public:	int x;	A(int a = 0) { x = a; }};class B:public A {public:	int y;	B(int a = 0, int b = 0):A(b) { y = a; }	void PB() { cout << &q
        阅读全文
                
摘要:对于公有派生来说,可以将派生类的对象赋给基类的对象,反之是不可以的。赋值兼容性规则可以总结为4点:1、不允许将基类的对象赋给派生类的对象。2、派生类的对象可以赋给基类的对象。3、可将派生类的对象的指针赋给基类的指针变量。4、派生类对象可以初始化基类型的引用。在3、4两种情况下,使用基类的指针或引用时,只能访问从相应基类中继承来的成员,不允许访问其他基类的成员或在派生类中增加的成员。#include class Base {private:	int val; char bit1;};class Child:public Base {private:	char bit2;};int mai...
        阅读全文
                
摘要:http://www.cnblogs.com/lionfight/archive/2012/05/25/2518631.html 什么时候用拷贝构造函数,和赋值构造函数:(一)当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数: 一个对象以值传递的方式传入函数体 一个对象以值传递的方式从函数返回 一个对象需要通过另外一个对象进行初始化。 如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位...
        阅读全文
                
摘要:下面定义的是类模板,用int实例化T后成为模板类。实例化类模板的语法:类名<模板实参表>结合下例即 Array<int> 就是将类模板Array实例化为模板类的语法。/*类模板*/#include <iostream>using namespace std;template<class T>class Array {	T *data;	int size;public:	Array(int i) { data = new T[i]; size = i;	}	~Array() { delete[] data;	}	T& operator[](
        阅读全文
                
摘要:/*函数模板*/#include <iostream>using namespace std;//template<typename T> //也可以用typename关键字。template<class T>T mymax(T x, T y){	return (x > y) ? x : y;}int main(void){	cout << mymax(2.3f, 1.3f) << endl;	cout << mymax(2, 3) << endl;	cout << mymax('a&
        阅读全文
                
摘要:友元函数不是类的成员函数,没有this指针,所以必须在参数表中显式列出每一个操作数。#include <iostream>using namespace std;class Test {public:	int a;	int b;	Test(): a(2), b(3) {};	friend ostream& operator<< (ostream& out, const Test& t)	{ out << t.a << "hello" << t.b; return out;	}};int ma
        阅读全文
                
摘要:常成员函数不能改变数据成员!#include <iostream>using namespace std;class Test {private:	int a;public:	int geta() { return a++; //正确!	}	int getConst() const { return a++; //错误!常成员函数不能改变数据成员。	}};int main(void){	return 0;}
        阅读全文
                
摘要:静态成员函数如何初始化#include <iostream>using namespace std;class Test {private:	static int statica;	int b;public://	Test(): statica(1) {}; //错误!static数据成员不能通过初始化列表初始化。	Test(): b(1) {statica = 1;};	//正确。};int main(void){	return 0;}#include <iostream>using namespace std;class Test {private:	static 
        阅读全文
                
摘要:1、友元的声明只能出现在类定义的内部,2、可以出现在类中的任何地方,3、友元不是类的成员函数!所以它的声明可以出现在类中任何地方,而不受声明前面的访问控制影响!以上几条可见下例子:#include <iostream>using namespace std;class TestPoint {private:	int x;	int y;	friend int distanceOne();	//友元的声明可以出现在类内任何地方,它不是类的成员函数!public:	friend int distanceTwo();	//友元的声明可以出现在类内任何地方,它不是类的成员函数!};int d
        阅读全文
                
摘要:/****************************************************# File : main.cpp# Author : lucasysfeng# Revision : 2014-10-13 17:04:43# Descripti...
        阅读全文
                
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号