关于C++中在类中使用结构体定义的问题

xiongshaoliu 2015-10-03 03:44:20
刚接触C++,老师给我们布置了一个关于数据处理的大作业,之前一直学C,以前没用过C++,所以对类的认识好模糊....
问题是这样的,因为有关数据处理,所以我想用BinaryTree来做这个题,在写基本操作函数碰到了这样的问题:

class BinaryTree{
private:
typedef struct info{
std::string Recipe;
std::string By;
std::string PrepTime;
std::string Categories;
}Item;
typedef struct node{
Item item;
struct node *left;
struct node *right;
}Node;
typedef struct tree{
Node *root;
int size;
}Tree;
Node *MakeNode(const Item *information);
Node *MakeNode(const Item *information){
............
}
};

我在类里面定义了结构体Node,并且想以Node为类型构造函数。可是因为Node是私有的(我不用pubilc是因为不知道为什么下意识觉得这样就不算封装了=-=....虽然知道肯定错了,但是还是不知道什么时候该private,什么时候改public),我不知道怎么定义。。。最开始我是这样乱写的:

BinaryTree::Node BinaryTree::*MakeNode()......

然后正常的悲剧了,我想到内联函数(老师上课稍微提了一下),如上图,发现还是不行。。。。
请问各位大大怎么定义Node *MakeNode()呢?
另外在C++里面 有没有其他办法来取代struct来构造树呢?这样算正常的封装吗?
我有些笨,希望大大们能解答下我的疑问,十分感谢~~
哦对了,我的编译环境是centos7下的vim...
...全文
3053 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Happy_dog Jack 2015-10-03
  • 打赏
  • 举报
回复
引用 3 楼 xiongshaoliu的回复:
另外,

class BinaryTree{
    private:
        typedef struct Item{
        ........
        }Item;
    public:
        Item  FuncitonName(para....);
}
我该怎么在外部定义Item FuncitonName(para....)呢?
类外定义加上作用域操作符“::”即可:BinaryTree::Item BinaryTree::FunctionName(){}。 构造函数的作用就是给类中数据赋初值嘛,所以不用返回值。
xiongshaoliu 2015-10-03
  • 打赏
  • 举报
回复
另外,

class BinaryTree{
    private:
        typedef struct Item{
        ........
        }Item;
    public:
        Item  FuncitonName(para....);
}
我该怎么在外部定义Item FuncitonName(para....)呢?
xiongshaoliu 2015-10-03
  • 打赏
  • 举报
回复
嗯 谢谢了!不过第一点没太明白,构造函数没有返回值?是因为函数和构造函数是2个不同的概念吗?
二班的码农 2015-10-03
  • 打赏
  • 举报
回复
首先楼主,MakeNode不是构造函数,你可以查看一下教材中构造函数的定义,构造函数必须和类名一样,且没有返回值。 第二,内联函数和普通函数的区别不在于其访问权限,而在于其调用方式,内联函数在编译时,会将函数体代码直接拷贝到调用处,有点类似于宏的用法,所以在运行时,不需要像一般函数调用那样,对现场进行压栈操作等,实现效率高,但会增加代码的扩充,即增加可执行文件的大小。 一般来说,需要被外界访问的就用public,不需要外部访问的就用private,需要继承访问的就用protect。所以一般来说,构造函数是public,除单例模式以外 声明public并不会破坏封装性,封装性指的是数据,而不是方法,public就好像是一个对外的接口,如果类的所有函数和变量都是private,那就没有任何意义了

64,635

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧