因为我是C ++的新手,所以就这样了!
我有一个基类(我没有在任何地方使用继承)和两个其他类的对象。我需要从私人成员访问另一个类中的另一个。
class base
{
private:
myClass1 m1;
myClass2 m2;
public:
base() {};
~base() {};
};
class myClass1
{
private:
int m_member1;
public:
myClass1() {};
~myClass1() {};
};
class myClass2
{
private:
int m_member2;
public:
myClass2() {};
~myClass2() {};
int sum_members_because_yes(void)
{
return (myClass1::m_member1 + m_member2); //HOW CAN I DO THIS???
}
};
如何从myClass2中的myClass1访问m_member1?:)
(我想避免继承,因为在我的代码中myClass1和2不是基类...)
由于
答案 0 :(得分:1)
我不清楚你想要达到的目标。我认为能够有两个类在另一个类中保存数据,并且有一个函数返回两个类数据的某种组合。我会用以下方式做到这一点:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<link href='../fullcalendar/fullcalendar.css' rel='stylesheet' />
<link href='../fullcalendar/fullcalendar.print.css' rel='stylesheet' media='print' />
<script src='../lib/moment.min.js'></script>
<script src='../lib/jquery.min.js'></script>
<script src='../fullcalendar/fullcalendar.min.js'></script>
<script type='text/javascript' src='gcal.js'></script>
<script>
var calenderNo=1;
$(document).ready(function() {
$('#calendar1').fullCalendar({
googleCalendarApiKey: 'xxxxxxxxxxxxxxxxxxx',
events: {
googleCalendarId: 'xxxxxxxxxxxxxxxxxxx'
}
});
$('#calendar2').fullCalendar({
googleCalendarApiKey: 'xxxxxxxxxxxxxxxxx',
events: {
googleCalendarId: 'xxxxxxxxxxxxxxxx'
}
});
$('#calendar3').fullCalendar({
googleCalendarApiKey: 'xxxxxxxxxxxxxxx',
events: {
googleCalendarId: 'xxxxxxxxxxxxxxx'
}
});
setInterval(function(){
$('#calendar'+calenderNo++).hide();
if(calenderNo==4)
calenderNo=1;
$('#calendar'+calenderNo).show();
});
</script>
<style>
body {
margin: 40px 10px;
padding: 0;
}
#calendar1 {
max-width: 900px;
margin: 0 auto;
}
#calendar2 {
max-width: 900px;
margin: 0 auto;
display:none;
}
#calendar3 {
max-width: 900px;
margin: 0 auto;
display:none;
}
</style>
</head>
<body>
<div id='calendar1'></div>
<div id='calendar2'></div>
<div id='calendar3'></div>
</body>
</html>
这里我们有两个类(B和C),它们包含数据,然后是类A,它具有类型B和C的成员。返回总和的函数应该是类A的方法,因为它包含B和C的实例数据类的私有数据是通过getter访问的,这允许访问数字,但不能更改它的值。在我的例子中,B和C类是相同的。如果两个对象是同一个“事物”的两个实例,那么它们应该是同一个类的两个实例,而不是不同的类。我希望我已经回答了正确的问题。
答案 1 :(得分:1)
有很多方法可以做到。
要允许访问m_member1
,您可以公开m_member1
。或者您可以声明friend
myClass1
的内容,如下所示:
class myClass1
{
private:
int m_member1;
...
friend class base;
};
或者这个:
class myClass1
{
private:
int m_member1;
...
friend class myClass2;
};
或者这个:
class myClass1
{
private:
int m_member1;
...
friend class int myClass2::sum_members_because_yes(void);
};
或者你可以给myClass1
一个公共访问者:
class myClass1
{
...
public:
...
int get_m_member1() const
{
return(m_member_1);
}
};
然后,为了让m2
到达m1
,您可以m2
指向m1
:
class myClass2
{
...
public:
myClass1 *pm1;
};
class base
{
...
public:
base()
{
m2.pm1 = &m1;
};
};
或者您可以根据m_member1
的请求在m2
中传递sum_members_because_yes
的值,但这个答案会变得很长。
(一旦您对所有这些感到满意,您应该注意base
确实属于-- I suggest you to modify the table. Here is updated table structure
--
-- Table structure for table `reminder`
--
CREATE TABLE `reminder` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`startdate` datetime NOT NULL,
`enddate` date NOT NULL,
`kind` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Dumping data for table `reminder`
--
INSERT INTO `reminder` (`id`, `title`, `startdate`, `enddate`, `kind`) VALUES
(1, 'This is reminder', '2015-06-03 19:25:44', '2015-07-21', 'weekly');
-- Query data get results for 2015-06-17 from `reminder` table
SELECT CONCAT_WS(' ','2015-06-17',TIME(startdate)) AS ReminderDateTime, title
FROM reminder
WHERE IF(
kind='daily',
((UNIX_TIMESTAMP('2015-06-17') -UNIX_TIMESTAMP(DATE(startdate))) % (1*24*60*60)=0) ,
IF(
kind='weekly',
((UNIX_TIMESTAMP('2015-06-17') -UNIX_TIMESTAMP(DATE(startdate))) % (7*24*60*60)=0) ,
IF(
kind='monthly',
DAYOFMONTH('2015-06-17')=DAYOFMONTH(startdate),
IF(
kind='quarterly',
((UNIX_TIMESTAMP('2015-06-17') -UNIX_TIMESTAMP(DATE(startdate))) % (91*24*60*60)=0) ,
IF(
kind='yearly',
DAYOFYEAR('2015-06-17')=DAYOFYEAR(startdate),
IF(
kind='',
startdate,
'0000-00-00 00:00:00'
)
)
)
)
)
) AND DATE(startdate) <='2015-06-17' AND IF(enddate<>'0000-00-00',enddate>='2015-06-17','1') ORDER BY ReminderDateTime ASC
。)