vs2010编译C++ 友元函数】的更多相关文章

// CTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <math.h> using namespace std; class Cpoint{ private: double x,y; public: Cpoint(double x1,double y1){ x=x1;y=y1; } void print(){ cout<<"(&qu…
// CTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; class Tc{ private : int a; static int b; public : Tc(int t){ a = t;b = b+t; } static void display(Tc C){ cout<<C.a<<' '<<C.b<…
友元函数和友元类在实际开发中较少使用,想快速学习C++的读者可以跳过本节. 一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来补充介绍一个例外——友元(friend). 在C++中,这种关系以关键宇 friend 声明,中文多译为友元.友元可以访问与其有好友关系的类中的私有成员,友元包括友元函数和友元类.如果您对友元这个名词不习惯,可以按原文 friend 理解…
条款17 在operator=中检查给自己赋值的情况 1 2 3 class  X { ... }; X a; a = a;  // a 赋值给自己 >赋值给自己make no sense, 但却是合法的; 重要的是, 赋值给自己的情况可以以隐蔽的形式出现: a = b; 如果b是a的另一个名字(初始化为a的引用), 那也是对自己赋值; 这是一个别名的例子: 同一个对象有两个以上的名字; 别名可以以任意形式的伪装出现, 在写函数时一定要考虑到; Note 赋值运算符中要特别注意可能出现别名的情况…
题目:用C++设计一个不能被继承的类. 分析:这是Adobe公司2007年校园招聘的最新笔试题.这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目. 在Java中定义了关键字final,被final修饰的类不能被继承.但在C++中没有final这个关键字,要实现这个要求还是需要花费一些精力. 首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数.同样,子类的析构函数也会自动调用父类的析构函数.要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函…
原文地址:http://stackoverflow.com/q/23171337/3309790 在c++中,模板类中能够直接定义一个友元函数.该函数拥有訪问该模板类非public成员的权限. 比方: #include <iostream> using namespace std; template <typename T> class template_class { T v; friend void foo(template_class t) { t.v = 1; // (1)…
1. 非成员非友元好还是成员函数好? 想象一个表示web浏览器的类.这样一个类提供了清除下载缓存,清除URL访问历史,从系统中移除所有cookies等接口: class WebBrowser { public: ... void clearCache(); void clearHistory(); void removeCookies(); ... }; 许多用户想将这些动作一块执行,所以web浏览器为此可以提供一个函数: class WebBrowser { public: ... void…
本来这篇博客是不打算写的,内容不是很难,对于我自己来讲,更多的是为了突出细节. 所谓template friend functions,就是使友元函数本身成为模板.基本步骤:1,在类定义的前面声明每个模板函数.eg:template <typename T> void counts(); template <typename T> void report<>(T &);2,在类声明中再次将模板声明为友元. template <typename TT>…
运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其在应用于字符串时的行为会有所不同. 当C++编译器看到 + 运算符时,它通过查看操作数的类型来决定使用的是哪种运算,如果编译器看到 + 应用于两个整数,它会采用我们一般的数字相加. 如果操作数是字符串,那么实现的就是两个字符串之间的连接. 重载运算符的能力是C++的一个强大功能,可以使程序更容易阅读…
demo 1 #include <iostream> #include <cstdio> using namespace std; //template <typename T> class Complex { friend ostream &operator << (ostream &out, Complex &c2); public: Complex(int a, int b) : a(a), b(b) {} Complex op…