如何通过“const”调用成员函数? [英] How to invoke member function over by "const"?

查看:62
本文介绍了如何通过“const”调用成员函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

#include< string>

#include< iostream>

使用命名空间std;


class TConst

{

private:

string con;

string uncon;

public:

TConst():con(const),unc(Un const){}

string GetString()const;

string& GetString();

};

//我如何调用这个成员函数?

string TConst :: GetString()const

{

返回con;

}

string& TConst :: GetString()

{

return uncon;

}


int main( )

{

TConst tc;

const string& csr = tc.GetString();

const string cs = tc.GetString();

string& sr = tc.GetString();

string s = tc.GetString();


cout<<" const string& csr ="<< csr<< endl;

cout<<" const string cs ="<< cs<< endl;

cout<<" string& sr ="<< sr<< endl;

cout<<" string s ="<< s<< endl;

}


===输出=============

const string& csr = Un const

const string cs = Un const

string& sr = Un const

string s = Un const

===输出结束=====


为什么所有的callGetString()调用un const函数。

-

= = = = = = = = = = = = = = = = = = = = = = =


?????????????? ----------------------------

公司:beijing lingtu

广告:beijing shangdi

邮编£100094

电话:010 -82825800£* 8006

手机:

Mail $$$ozh**********@lingtu.com

MSN: re********@hotmail.com

Com。£ o http://www.lingtu.com/

在线: http://www.51ditu.com/

--------------------------

#include <string>
#include <iostream>
using namespace std;

class TConst
{
private:
string con;
string uncon;
public:
TConst():con("const"),uncon("Un const"){}
string GetString()const;
string& GetString();
};
//how can I invoke this member function?
string TConst::GetString()const
{
return con;
}
string& TConst::GetString()
{
return uncon;
}

int main()
{
TConst tc;
const string& csr=tc.GetString();
const string cs=tc.GetString();
string& sr=tc.GetString();
string s=tc.GetString();

cout<<"const string& csr="<<csr<<endl;
cout<<"const string cs="<<cs<<endl;
cout<<"string& sr="<<sr<<endl;
cout<<"string s="<<s<<endl;
}

===output=============
const string& csr=Un const
const string cs=Un const
string& sr=Un const
string s=Un const
===output end=====

why all the call "GetString()" invoke the un const function.
--
= = = = = = = = = = = = = = = = = = = = = =

??????????????----------------------------
Co.: beijing lingtu
Ad.: beijing shangdi
ZIP£o 100094
Tel.: 010-82825800£*8006
Mobile:
Mail£ozh**********@lingtu.com
MSN: re********@hotmail.com
Com.£o http://www.lingtu.com/
Online:http://www.51ditu.com/
--------------------------

推荐答案

recover写道:
recover wrote:

#include< string>

#include< iostream>

using namespace std;


类TConst

{

私人:

字符串con;

string uncon;

public:

TConst():con(const),uncon(Un const){}

string GetString()const;

string& GetString();

};

//如何调用此成员函数?
#include <string>
#include <iostream>
using namespace std;

class TConst
{
private:
string con;
string uncon;
public:
TConst():con("const"),uncon("Un const"){}
string GetString()const;
string& GetString();
};
//how can I invoke this member function?



你需要一个const对象。

You need a const object for that.


string TConst :: GetString()const

{

返回con;

}

string& TConst :: GetString()

{

return uncon;

}


int main( )

{

TConst tc;
string TConst::GetString()const
{
return con;
}
string& TConst::GetString()
{
return uncon;
}

int main()
{
TConst tc;



''tc''是一个NON-const对象(在这个范围内,无论如何)。

The ''tc'' is a NON-const object (in this scope, anyway).


const string& csr = tc.GetString();

const string cs = tc.GetString();

string& sr = tc.GetString();

string s = tc.GetString();


cout<<" const string& csr ="<< csr<< endl;

cout<<" const string cs ="<< cs<< endl;

cout<<" string& sr ="<< sr<< endl;

cout<<" string s ="<< s<< endl;

}


===输出=============

const string& csr = Un const

const string cs = Un const

string& sr = Un const

string s = Un const

===输出结束=====


为什么所有的callGetString()调用un const函数。
const string& csr=tc.GetString();
const string cs=tc.GetString();
string& sr=tc.GetString();
string s=tc.GetString();

cout<<"const string& csr="<<csr<<endl;
cout<<"const string cs="<<cs<<endl;
cout<<"string& sr="<<sr<<endl;
cout<<"string s="<<s<<endl;
}

===output=============
const string& csr=Un const
const string cs=Un const
string& sr=Un const
string s=Un const
===output end=====

why all the call "GetString()" invoke the un const function.



因为所有调用都是针对''tc''对象的,所以它是非常量的。


V

-

请在通过电子邮件回复时删除资金''A'

我不回复热门回复,请不要问

Because all invocations are for the ''tc'' object an it is non-const.

V
--
Please remove capital ''A''s when replying by e-mail
I do not respond to top-posted replies, please don''t ask


recover写道:
recover wrote:

#include< string>

#include< iostream>

使用命名空间std;


class TConst

{

private:

string con;

string uncon;

public:

TConst():con( const,un(Un const){}

string GetString()const;

string& GetString();

};

//我如何调用这个成员函数?

string TConst :: GetString()const

{

返回con;

}

string& TConst :: GetString()

{

return uncon;

}


int main( )

{

TConst tc;

const string& csr = tc.GetString();

const string cs = tc.GetString();

string& sr = tc.GetString();

string s = tc.GetString();


cout<<" const string& csr ="<< csr<< endl;

cout<<" const string cs ="<< cs<< endl;

cout<<" string& sr ="<< sr<< endl;

cout<<" string s ="<< s<< endl;

}


===输出=============

const string& csr = Un const

const string cs = Un const

string& sr = Un const

string s = Un const

===输出结束=====


为什么所有的callGetString()调用un const函数。
#include <string>
#include <iostream>
using namespace std;

class TConst
{
private:
string con;
string uncon;
public:
TConst():con("const"),uncon("Un const"){}
string GetString()const;
string& GetString();
};
//how can I invoke this member function?
string TConst::GetString()const
{
return con;
}
string& TConst::GetString()
{
return uncon;
}

int main()
{
TConst tc;
const string& csr=tc.GetString();
const string cs=tc.GetString();
string& sr=tc.GetString();
string s=tc.GetString();

cout<<"const string& csr="<<csr<<endl;
cout<<"const string cs="<<cs<<endl;
cout<<"string& sr="<<sr<<endl;
cout<<"string s="<<s<<endl;
}

===output=============
const string& csr=Un const
const string cs=Un const
string& sr=Un const
string s=Un const
===output end=====

why all the call "GetString()" invoke the un const function.



因为被调用的函数取决于进行

调用的对象(tc)并且不依赖于你分配的结果

函数调用。如果你想调用const成员函数那么

你需要在const对象上调用GetString。


const TConst tc;

tc.GetString();


或者,您可以将非常量TConst强制转换为const TConst。

Because the function that is called depends upon the object making the
call (tc) and does not depend upon what you assign the result of the
function call to. If you want to call the const member function then
you need to invoke GetString on a const object.

const TConst tc;
tc.GetString();

Or, you can cast a non-const TConst to a const TConst.


已发布:
recover posted:

为什么所有的调用都是GetString()调用un const函数。
why all the call "GetString()" invoke the un const function.



class MyClass {

public:


void Func(){}


void Func()const {}

};


int main()

{

MyClass obj;

MyClass const cobj;


obj.Func()/ *非const版本* /

cobj.Func()/ * Const版本* /


const_cast< MyClass const&>(obj).Func()/ * Const版本* /

/ *或者如果您的恐惧症为const_cast

(这里有很多人似乎有),那么

你可以改为使用引用:* /


MyClass const& cr = obj;


cr.Func(); / * Const Version * /

}

我想知道在const对象上调用非const函数是否为UB

(如果非const函数不会改变任何成员数据)?类似于:


const_cast< MyClass&>(cobj).Func();


任何人都知道这是否被禁止?


-


Frederick Gotham


class MyClass {
public:

void Func() {}

void Func() const {}
};

int main()
{
MyClass obj;
MyClass const cobj;

obj.Func() /* Non-const version */
cobj.Func() /* Const version */

const_cast<MyClass const&>(obj).Func() /* Const version */
/* Or if you have a phobia of "const_cast"
(as many people here seem to have), then
you can use a reference instead: */

MyClass const &cr = obj;

cr.Func(); /* Const Version */
}
I wonder would it be UB to call the non-const function on a const object
(if the non-const function doesn''t alter any member data)? Something like:

const_cast<MyClass&>(cobj).Func();

Anyone know if that''s forbidden?

--

Frederick Gotham


这篇关于如何通过“const”调用成员函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆