整理日: 2015年03月18日 在 C++ 中,操作符(运算符)可以被重载以改写其实际操作.同时我们可以定义一个函数为类的朋友函数(friend function)以便使得这个函数能够访问类的私有成员,这个定义通常在头文件中完成. 在Visual C++中定义一般的函数为朋友函数通常是没有问题的.然而对某些重载操作符的函数,即使我们将它们定义为类的朋友函数,VC的编译器仍然会显示出错信息,认为这些朋友函数无权访问类的私有成员.我认为这应该是VC6.0的bug. 以下代码就是个例子: // 头文…
在程序中,难免要访问某个对象的私有成员.那么以前实现这类功能的方法有两种,第一种方法最简单,就是把成员访问符从“private”改为“public”即可:而另一个就是提供公有的成员访问函数来进行访问.那么现在用C#编写程序,就不再需要采用前面所说的两种方法了,而直接使用属性来完成. 首先来看看三种方法的如何实现以及调用的,这里用一个例子来说明,即访问“EmployeeInfo”类的私有成员strName,具体如下表格所示. 那么这三种方法有什么区别呢,用如下的表格,可以更好的说明三者的区别. 因…
http://blog.sina.com.cn/s/blog_5f8861b60102v1nl.html Delphi 跨单元进入(访问)类的私有成员,protected ,private部分 (2014-09-25 21:33:36) 标签: delphi 分类: 软件设计 转:http://hi.baidu.com/auwage/blog/item/6142231ef4f127fce1fe0bf4.html   作者:二娃(QQ:78493244)   delphi 中,同单元类,可以任意进…
首先我必须承认访问一个类的私有成员不是什么好做法.大家也都知道私有成员在外部是不能被访问的.而一个类中会存在很多私有成员:如私有字段.私有属性.私有方法.对于私有成员访问,可以套用下面这种非常好的方式去解决. private string name;public string Name{ get { return name; } set { name = value; }} 但是有时候,源代码是别人的,你就不能修改源代码,只提供给你dll.或者你去维护别人的代码,源代码却有丢失.这样的情况如果你…
举个例子: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include<iostream> using namespace std; class cylinder {     friend istream operator>>(istream& is,cylinder &cy); public:         inline doub…
c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date' 代码如下: #ifndef _DATE_H_ #define _DATE_H_ #include<iostream> using namespace std; class Date { public: Date(); Date(int y,int m,int d); void printOn();…
原创文章,欢迎转载.转载请注明:关东升的博客 Swift 2.0中的print函数有4种重载形式: l   print(_:).输出变量或常量到控制台,并且换行. l   print(_:_:).输出变量或常量到指定类型的流中,并且换行. l   print(_:appendNewline:).输出变量或常量到控制台,appendNewline参数是布尔值,true表示换行,false表示不换行. l   print(_:_:appendNewline:) .输出变量或常量指定类型的流中,app…
利用VC中的MFC进行界面设计时,发现界面上的各控件无法简易地进行调整,比如字体大小.颜色.格式等. 为了改变外观,小小地美化一下,今天决定动手一试. 网上提供的库和方法不计其数,我选择了SkinMagic的破解版http://ishare.iask.sina.com.cn/f/34174084.html. 其实具体用时,只需其中的几个文件,下面简单介绍一下整个流程: 1.打开VC6.0,新建一个MFC基于对话框的应用程序Skin: 2.在CSkin.cpp(.h文件添加在StdAfx.h中也可…
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, class _Ax = allocator<_Ty> > class vector; 但在VC2008 中vector 还有基类,如下:  C++ Code  1 2 3 4 5 6 7   // TEMPLATE CLASS vector template < class _Ty,   …
Duilib库的源代码是在vs2010下编译的,一般适用于vs2008及以上的版本开发使用,那么duilib能不能在vc6.0的工程中使用呢?如何在vc6.0中使用duilib库呢? 今天,由于工作要求,需要在vc6.0下使用duilib库,百度了很久,未果,所以自己来尝试了一下!   1.在vc6.0中,新建一个MFC对话框工程,我用的是mfc对话框,习惯这么用. 2.将Duilib头文件及lib引用库拷贝到工程目录,引用进去. 3.新建duidlg类,这个类是自己定义的,对应这duilib里…
附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tools>Options>Directories>Include files. 对于特定项目的头文件包含,在“Project Setting>C/C++ (Category:Preprocessor)>Additional include directories”处添加附加头文件目录,相对目录参考*.dsp文件.   目录路径不需添加双引号,路径分隔符为’/’或’\’,不必考虑反斜杠’\’的转义.多个路径…
重载操作符与转换 --赋值.下标.成员訪问操作符 一.赋值操作符 类赋值操作符接受类类型形參,通常该形參是对类类型的const引用,但也能够是类类型或对类类型的非const引用.假设未定义这个操作符,则编译器将合成它.类赋值操作符必须是类的成员,以便编译器能够知道是否须要合成一个.并且还能够为一个类定义很多附加的赋值操作符,这些赋值操作符会由于右操作数的不同而构成重载!如string类型: string car("Volks"); car = "Studebaker"…
C++中的友元函数主要应用于以下场景: 友元函数 第一种场景 代码中有一个全局函数,该函数想要去访问某个类的成员变量(该类的成员变量是private的,且该类并未提供任何获取获取私有成员变量的public方法),这时候可以在这个类中把该全局函数声明为友元函数,这样这个全局函数就具备了能够获取那个类的私有成员变量的资格. 例:通过友元函数获取Person类的各项字段信息: main.cpp #include <iostream> #include "Person.h" voi…
在嵌套类中,内部类可以直接访问外部类的私有成员变量,但是外部类不能直接访问内部类的私有成员变量,必须把外部类声明为内部类的友元类 /************************************************************************* > File Name: test_private_outToinn.cpp > Author: 阿瞒123 > Mail: caopp123@126.com > Created Time: 2016年06…
字段初始化规律: 当执行如下代码时 class InitializeBlockClass{ public int field=100; { field=200; } public InitializeBlockClass(int value) { this.field=value; } public InitializeBlockClass(){ } { field=150; } } public class Work { public static void main(String[] arg…
友元(友元函数.友元类和友元成员函数) C++ 有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(friend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响.通常,将友元声明成组地放在类定义的开始…
有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的.例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员. 友元(frend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响.通常,将友元声明成组地放在类定义的开始或结尾是个好主意. 1.友元函数 友元函数是指某些…
一.综述 类是我们自己定义的数据类型(新类型) 设计类时要考虑的角度: (1)站在设计和实现者的角度来考虑 (2)站在使用者的角度来考虑 (3)父类,子类 二.类基础 (1)一个类就是一个用户自己定义的数据类型,把类可以想象为一个命名空间,包着一堆东西(成员函数,成员变量). (2)一个类的构成:成员变量,成员函数(有许多特殊的成员函数). (3)我们访问类成员时,我们就用对象名.成员名来访问成员 如果是指向对象的指针,我们就用指针名->成员名来访问成员. class student { int…
友元函数:不是类成员函数,是一个类外的函数,但是可以访问类所有成员. class Point{ public: friend void fun(Point t);//友元函数 private: int a; protected: int b; }; void fun(Point t) { t.a = ; t.b = ; cout << t.a << " " << t.b << endl; } int main() { Point test…
一.引言 今天看项目里的一段代码发现,竟然可以再类的成员函数中访问该类的对象的私有成员.感觉不可思议. 自己写的实例代码: #include <iostream> using namespace std; class CTest { public: CTest(int n) { m_a = n; } CTest(CTest &t) { m_a = t.m_a; } public: void Print() { cout << m_a << endl; } pri…
Java语言中,在一个类中,为了不让外界访问到有的属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的,这就是java反射带来的便利.利用反射访问类的私有属性及方法如下: 1.准备一个java类,包含私有属性及方法: //Exam.java public class Exam{ private String field1="私有属性"; public String field2="…
如下图所示 内部类可以访问外部类的私有成员 而外部类无法访问内部类的私有成员 为了能让外部类访问内部类的私有成员,将外部类声明为内部类的友元类即可 #include <iostream> using namespace std; class Outer { public: class Inner { friend class Outer; //Outer是Inner的友元类 public: void func(const Outer &outer) const { cout <&…
如何访问类的私有属性? 下面以 TPathData 为例,它有一个私有属性 PathData,储存了每一个曲线点,但一般无法修改它,需要利用下面方法,才能访问修改(若有更好的方法,歡迎分享): 一.利用 RTTI 取得类私有属性(建议使用此方法): type TPathDataHelper = class helper for TPathData public function PathData: TList<TPathPoint>; end; function TPathDataHelper…
1.首先说说为什么要重载操作符[ ] 主要是因为系统只给了整数类型(int)的重载函数,即只能在方括号中输入整数进行查找,但有时候我们可能存放数据时,下标的类型是自定义的,希望也能像数组直接通过下标访问元素的形式(形如A[i]) ,这时候就需要对下标操作符[]进行重载,使得操作得以进行 2.重载操作符[]的作用 一般作用是取值,引用返回值是这个值得别名,引用返回是返回原来的东西,在内存上是相同的,直接返回会创建一模一样的临时变量返回,类较大时,增加内存消耗 3.通过operator关键字进行重载…
http://blog.csdn.net/starlee/article/details/1406781 对于如下的类: class ClxECS{public:    double Test(double dValue) { return dValue * 13; }; private:    int Test(int iValue) { return iValue * 13; };}; 下面的函数输出是什么? void ECS_test(){    int iValue = 13; ClxE…
问题 昨晚遇到一个有意思的问题,明明在Visual Studio 2019运行好好的C语言代码,Copy到Visual C++ 6.0中就无法编译通过了,错误提示信息如下: error C2143: syntax error : missing ';' before 'type' 这就有意思了,明明在Visual Studio 2019中运行的好好的,复制到Visual C++ 6.0就报错缺少分号呢,哈哈. 通过错误信息定位到代码的具体位置,发现错误都是在gets函数的下一行中.只要把gets…
1.函数重载 相同作用域下,有多个函数名相同,但形参列表不同的函数,常用于处理功能相同但数据类型不同的问题 函数重载的规则: 函数名必须相同 函数形参列表必须不同(可以是参数个数不同,或者数据类型不同,或者参数排列顺序不同) 返回值可以相同也可以不同 注意:如果函数名相同,函数形参列表也相同,只有返回值不同,属于函数重定义 int GetMax(int a, int b) { return a>b ? a:b; } //函数名相同,形参数据类型和返回值不同 float GetMax(float…
直接来看代码: public class Example { int x = 3;//类的实例变量,初始化值为3 static int y = 4;//类的静态变量,初始化值为4 public static void method()//静态方法 { System.out.println("实例变量x = " + new Example().x);//在静态方法中访问类的实例变量需首先进行类的实例化 System.out.println("静态变量y = " + y…
/**子类会继承父类所有的属性和方法. * 但是根据不同的权限标识符,子类不可见父类的私有变量,但可以通过父类的公共方法访问私有变量 * 所以对于重名变量,子类和父类都各有一份. * 对于子类和父类中重名的方法,则为重写.即子类重写了父类的方法,用于多态. * 同一个类中函数的签名不同,则为方法的重载.函数的签名为函数名+参数列表,与返回值无关. */…
需求是类A中包含类B,而类B又需要访问类A的public属性的成员. 首先类B中要访问类A的属性,那么对于类B而言,我们必须要知道有类A这个类,所以在类B的具体实现之前我们需要前向声明类A. 对于类A包含一个类B的对象,那么对于类A而言,需要知道类B的构造函数,所以类B的构造函数的声明需要在类A的具体实现之前. main.cpp #if 0//Multi #include "A.h" #else #include <iostream> using namespace std…