C++类中的访问权限问题
摘要:纠结的东西:private,public,protected方法的访问范围.(public继承下)private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数A.在无继承的情况下,类内部可以随意访问,即使是private;类外部无法访问protected/private成员 .B.在有继承的情况下, (先确定类继承方
阅读全文
posted @
2013-09-28 10:48
可笑痴狂
阅读(21047)
推荐(0) 编辑
C++抽象类
摘要:一、纯虚函数定义. 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”二、引入原因:1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生..
阅读全文
posted @
2013-09-28 09:45
可笑痴狂
阅读(40952)
推荐(2) 编辑
句柄类与继承
摘要:1 /** 2 * C++ 面向对象编程的一个颇具讽刺意味的地方是:不能使用对象支持面向对象编程, 3 *相反,必须使用指针或引用,例如: 4 */ 5 void get_prices(Item_base object, const Item_base *pointer, const Item_base &reference) 6 { 7 //下边的两个调用在运行时进行动态绑定 8 cout net_price(1) 7 8 inline bool compare(const Sales_item &lhs, const Sales_item &rhs) 9 {10..
阅读全文
posted @
2013-09-28 08:42
可笑痴狂
阅读(749)
推荐(0) 编辑
虚函数、继承
摘要:所谓虚函数是指: 在类中被声明为virtual的成员,基类希望这种成员在派生类中重定义。除了构造函数外,任意非static成员都可以为虚成员。保留字 virtual 只在类内部的成员函数声明中出现,不能用在类定义体外部出现在函数定义上。protected标号: protected为受保护的访问标号,protected成员可以被该类的成员、友元和派生类成员(非友元)访问,而不可以被该类型的普通用户访问。而private成员,只能被基类的成员和友元访问,派生类不能访问。 派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限...
阅读全文
posted @
2013-09-25 09:27
可笑痴狂
阅读(2983)
推荐(0) 编辑
重载操作符与转换
摘要:1。在什么情况下重载操作符与内置操作符不同?在什么情况下重载操作符与内置操作符相同?不同:重载操作符必须具有至少一个类类型或枚举类型的操作数。重载操作符不保证操作数的求值顺序,例如对 && 和 || 的重载版本不再具有“短路求值”的特性,两个操作数都要进行求值,而且不规定操作数的求值顺序。相同:对于优先级和结合性及操作数的数目都不变。注意:操作符定义为非成员函数时,通常必须将它们设置为所操作类的友元示例: 1 class Sales_item 2 { 3 friend std::istream& operator >> ( std::istream&
阅读全文
posted @
2013-09-22 16:12
可笑痴狂
阅读(1045)
推荐(0) 编辑
智能指针(使用计数)、定义值型类
摘要:1、什么是使用计数? 使用计数是复制控制成员中使用的编程技术。将一个计数器与类指向的对象相关联,用于跟踪该类有多少个对象共享同一指针。创建一个单独类指向共享对象并管理使用计数。由构造函数设置共享对象的状态并将使用计数置为1。每当由复制构造函数或赋值操作符生成一个新副本时,使用计数加1。由析构函数撤销对象或作为赋值操作符的左操作数撤销对象时,使用计数减少1。赋值操作符和析构函数检查使用计数是否已减至0,若是,则撤销对象。2、什么是智能指针?智能指针如何与实现普通指针行为的类相区别? 智能指针是一个行为类似指针但也提供其他功能的类。这个类与实现普通指针行为的类区别在于:智能指针通常接受指向动态..
阅读全文
posted @
2013-09-22 10:16
可笑痴狂
阅读(1260)
推荐(0) 编辑
C++_友元函数总结(转)
摘要:原文地址:http://blog.csdn.net/insistgogo/article/details/66086721、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率,表达简单、清晰缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。2、什么时候使用友元函数:1)运算符重载的某些场合需要使用友元。2)两个类要共享数据的时候3、怎么使用友元函数:友元函数的参数: 因为友元函数没有this
阅读全文
posted @
2013-09-20 21:41
可笑痴狂
阅读(5391)
推荐(0) 编辑
赋值操作符、复制构造函数、析构函数、static成员练习
摘要:1 /** 2 * 定义一个Employee类,包含雇员名字和一个唯一的雇员标识,为该类定义默认构造函数和参数为表示 3 * 雇员名字的string构造函数。如果该类需要复制构造函数或赋值操作符,实现这些函数 4 * 5 * 注意:static数据成员必须在类定义体的外部定义(正好一次),static成员不是通过类构造函数进行初始化 6 * 而是应该在定义时进行初始化。 7 * (保证对象正好定义一次的最好方法就是将static数据成员的定义放在包含类的非内联成员函数定义的文件中) 8 * static数...
阅读全文
posted @
2013-09-19 07:54
可笑痴狂
阅读(730)
推荐(0) 编辑
为什么static数据成员一定要在类外初始化?(转)
摘要:1.避免重复定义和初始化>说在类外定义和初始化是保证static成员变量只被定义一次的好方法。但,为什么static const int就可以在类里面初始化呢?想起C中一个函数里定义一个static变量是为了保证只初始化一次。那么,是否可以这样理解:static数据成员在类外定义和初始化是为了保证只被定义和初始化一次,这样编译器就不必考虑类的函数里面第一个对static变量的’=’操作是赋值还是初始化了。static const int可以在类里面初始化,是因为它既然是const的,那程序就不会再去试图初始化了。而且,>说static const int也必须在类外定义,类里面的只
阅读全文
posted @
2013-09-17 22:55
可笑痴狂
阅读(12107)
推荐(4) 编辑
构造函数的初始化列表
摘要:1 /** 2 *有些成员必须在构造函数初始化列表中进行初始化。对于这样的成员,在构造函数体重对它们赋值不起作用。 3 *没有默认构造函数的类类型的成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化 4 *列表中进行初始化 5 */ 6 class ConstRef 7 { 8 public: 9 ConstRef(int ii);10 private:11 int i;12 const int ci;13 int &ri;14 };15 16 //错误做法17 Cons...
阅读全文
posted @
2013-09-17 11:12
可笑痴狂
阅读(324)
推荐(0) 编辑
再谈迭代器
摘要:一、插入迭代器 1 /** 2 解释三种插入迭代器的区别。 3 区别在于插入的元素的位置不同: 4 back_inserter,使用push_back实现在容器末端插入。 5 front_inserter, 使用push_front实现在容器前端插入。 6 inserter,使用insert实现插入,它还带有第二个实参:指向插入起始位置的迭代器 7 */ 8 9 #include 10 #include 11 #include 12 #include 13 14 using namespace std;15 16 int main()17 {18 v...
阅读全文
posted @
2013-09-15 18:13
可笑痴狂
阅读(405)
推荐(0) 编辑
算法函数练习
摘要:find:#include #include #include using namespace std;int main(){ int a[10]={0,1,2,3,4,5,6,7,8,9}; size_t a_size = sizeof(a)/sizeof(int); list li(a, a+a_size); list::iterator itor1, itor2; for(itor1 = li.begin(); itor1 != li.end(); ++itor1)//打印:0 1 2 3 4 5 6 7 8 9 cout 2 #include 3 #include //cou...
阅读全文
posted @
2013-09-12 11:59
可笑痴狂
阅读(287)
推荐(0) 编辑
map练习
摘要:1 /* 2 编写程序统计并输出所读入的单词出现的次数 3 4 */ 5 /* 6 //代码一:---用map索引实现惊人的简练 7 #include 8 #include 9 10 using namespace std;11 12 int main()13 {14 map word_cnt;15 string word;16 while(cin >> word)17 {18 ++word_cnt[word];//如果查找键值word不存在,那么map中就会插入键值为word的新元素,同时用值初始化或默认构造函数初始化19 ...
阅读全文
posted @
2013-09-10 10:08
可笑痴狂
阅读(470)
推荐(0) 编辑
指针的引用练习
摘要:1 #include 2 #include 3 4 using namespace std; 5 6 void ptrswap(int *&v1, int *&v2)//交换指针所指的地址 7 { 8 cout << endl; 9 cout << *v1 << "\t\t" << *v2 << endl;10 int *tmp = v1;11 v1 = v2;12 v2 = tmp;13 cout << *v1 << "\t\t" << *v
阅读全文
posted @
2013-09-10 10:04
可笑痴狂
阅读(277)
推荐(0) 编辑
流条件状态练习
摘要:1 #include 2 using namespace std; 3 4 int main() 5 { 6 int ival; 7 while(cin >> ival, !cin.eof()) 8 { 9 if(cin.bad())10 throw runtime_error("IO stream corrupted");11 if(cin.fail())12 {13 cerr 2 3 using namespace std; 4 5 istream & fun...
阅读全文
posted @
2013-09-10 10:03
可笑痴狂
阅读(396)
推荐(0) 编辑
set练习
摘要:#include #include #include using namespace std;int main(){ set setInt; vector ivec; for(vector::size_type i = 0; i != 11; ++i) ivec.push_back(i); setInt.insert(ivec.begin(), ivec.end()); setInt.insert(11); set::iterator itor1 = setInt.find(9);// 这个也对,为什么const类型的键值可以用非const的...
阅读全文
posted @
2013-09-10 10:01
可笑痴狂
阅读(287)
推荐(0) 编辑
pair练习
摘要:1 /* 2 编写程序读入一些列string和int型数据,将每一组存储在一个pair对象中, 3 然后将这些pair对象存储在vector容器里。 4 */ 5 6 #include 7 #include 8 #include //pair在里边定义 9 10 using namespace std;11 12 int main()13 {14 vector > vp;15 string key;16 int val;17 while(cin >> key >> val)18 {19 //vp.push_b...
阅读全文
posted @
2013-09-10 10:00
可笑痴狂
阅读(410)
推荐(0) 编辑
multiMap遍历方法
摘要:1 /* 2 multimap中的三种遍历方法 3 multimap中如果没有查找到相应元素,则返回的迭代器是依据该元素的排列顺序该键应该插入的位置 4 如果找不到,则方法一和方法二返回的两个迭代器应该相等 5 */ 6 #include 7 #include 8 #include 9 #include 10 11 using namespace std;12 13 int main()14 {15 multimap mulMap;16 mulMap.insert(make_pair("鲁迅", "朝花夕拾"));17 mulMap.in...
阅读全文
posted @
2013-09-10 09:57
可笑痴狂
阅读(19120)
推荐(3) 编辑